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

[01/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 99353e00e -> 883dde2f9


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html
index 3d2b4ec..ff8338b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html
@@ -128,7 +128,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1943">PerformanceEvaluation.ScanTest</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1944">PerformanceEvaluation.ScanTest</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TableTest</a></pre>
 </li>
 </ul>
@@ -208,8 +208,10 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>
+<div class="block">Test for individual row.</div>
+</td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
@@ -224,13 +226,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.Test">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -264,7 +259,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testScanner</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.client.ResultScanner <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html#line.1944">testScanner</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.client.ResultScanner <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html#line.1945">testScanner</a></pre>
 </li>
 </ul>
 </li>
@@ -281,7 +276,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ScanTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html#line.1946">ScanTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html#line.1947">ScanTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
          <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
          <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -300,7 +295,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockList">
 <li class="blockList">
 <h4>testTakedown</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html#line.1951">testTakedown</a>()
+<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html#line.1952">testTakedown</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>
@@ -316,11 +311,19 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testRow</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html#line.1960">testRow</a>(int&nbsp;i)
-      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html#line.1961">testRow</a>(int&nbsp;i)
+         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">PerformanceEvaluation.TestBase</a></code></span></div>
+<div class="block">Test for individual row.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">testRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>i</code> - Row index.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the row was sent to server and need to record metrics.
+         False if not, multiGet and multiPut e.g., the rows are sent
+         to server only if enough gets/puts are gathered.</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>
 </dl>


[36/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html
index fe3a872..b749ad3 100644
--- a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html
+++ b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.93">RSGroupAdminEndpoint</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.95">RSGroupAdminEndpoint</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>
 implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessor</a>, <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterObserver</a></pre>
 </li>
@@ -368,7 +368,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <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/rsgroup/RSGroupAdminEndpoint.html#line.94">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.96">LOG</a></pre>
 </li>
 </ul>
 <a name="master">
@@ -377,7 +377,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>master</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.96">master</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.98">master</a></pre>
 </li>
 </ul>
 <a name="groupInfoManager">
@@ -386,7 +386,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>groupInfoManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.99">groupInfoManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.101">groupInfoManager</a></pre>
 </li>
 </ul>
 <a name="groupAdminServer">
@@ -395,7 +395,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>groupAdminServer</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupAdminServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.100">groupAdminServer</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupAdminServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.102">groupAdminServer</a></pre>
 </li>
 </ul>
 <a name="groupAdminService">
@@ -404,7 +404,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>groupAdminService</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdminService <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.101">groupAdminService</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdminService <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.103">groupAdminService</a></pre>
 </li>
 </ul>
 <a name="accessChecker">
@@ -413,7 +413,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>accessChecker</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html" title="class in org.apache.hadoop.hbase.security.access">AccessChecker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.102">accessChecker</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html" title="class in org.apache.hadoop.hbase.security.access">AccessChecker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.104">accessChecker</a></pre>
 </li>
 </ul>
 <a name="userProvider">
@@ -422,7 +422,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockListLast">
 <li class="blockList">
 <h4>userProvider</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.105">userProvider</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.107">userProvider</a></pre>
 <div class="block">Provider for mapping principal names to Users</div>
 </li>
 </ul>
@@ -440,7 +440,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RSGroupAdminEndpoint</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.93">RSGroupAdminEndpoint</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.95">RSGroupAdminEndpoint</a>()</pre>
 </li>
 </ul>
 </li>
@@ -457,7 +457,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.108">start</a>(<a href="../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase">CoprocessorEnvironment</a>&nbsp;env)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.110">start</a>(<a href="../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase">CoprocessorEnvironment</a>&nbsp;env)
            throws <a href="https://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 interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Coprocessor.html#start-org.apache.hadoop.hbase.CoprocessorEnvironment-">Coprocessor</a></code></span></div>
 <div class="block">Called by the <a href="../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase"><code>CoprocessorEnvironment</code></a> during it's own startup to initialize the
@@ -476,7 +476,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.129">stop</a>(<a href="../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase">CoprocessorEnvironment</a>&nbsp;env)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.131">stop</a>(<a href="../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase">CoprocessorEnvironment</a>&nbsp;env)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Coprocessor.html#stop-org.apache.hadoop.hbase.CoprocessorEnvironment-">Coprocessor</a></code></span></div>
 <div class="block">Called by the <a href="../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase"><code>CoprocessorEnvironment</code></a> during it's own shutdown to stop the
  coprocessor.</div>
@@ -492,7 +492,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>getServices</h4>
-<pre>public&nbsp;<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;com.google.protobuf.Service&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.134">getServices</a>()</pre>
+<pre>public&nbsp;<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;com.google.protobuf.Service&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.136">getServices</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Coprocessor.html#getServices--">Coprocessor</a></code></span></div>
 <div class="block">Coprocessor endpoints providing protobuf services should override this method.</div>
 <dl>
@@ -510,7 +510,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterObserver</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterObserver</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.139">getMasterObserver</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterObserver</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.141">getMasterObserver</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessor.html#getMasterObserver--">getMasterObserver</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessor</a></code></dd>
@@ -523,7 +523,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>getGroupInfoManager</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.143">getGroupInfoManager</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.145">getGroupInfoManager</a>()</pre>
 </li>
 </ul>
 <a name="rsgroupHasServersOnline-org.apache.hadoop.hbase.client.TableDescriptor-">
@@ -532,7 +532,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>rsgroupHasServersOnline</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.356">rsgroupHasServersOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.404">rsgroupHasServersOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="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>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -546,7 +546,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>assignTableToGroup</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.377">assignTableToGroup</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.433">assignTableToGroup</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="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>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -560,7 +560,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>preCreateTableAction</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.400">preCreateTableAction</a>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.456">preCreateTableAction</a>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                                  <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
                                  <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;regions)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -586,7 +586,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>postCreateTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.412">postCreateTable</a>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.468">postCreateTable</a>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                             <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc,
                             <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;regions)
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -611,7 +611,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>postDeleteTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.419">postDeleteTable</a>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.475">postDeleteTable</a>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                             <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class 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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#postDeleteTable-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.TableName-">MasterObserver</a></code></span></div>
@@ -634,7 +634,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>preCreateNamespace</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.434">preCreateNamespace</a>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.490">preCreateNamespace</a>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                                <a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;ns)
                         throws <a href="https://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 interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preCreateNamespace-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.NamespaceDescriptor-">MasterObserver</a></code></span></div>
@@ -657,7 +657,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>preModifyNamespace</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.443">preModifyNamespace</a>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.499">preModifyNamespace</a>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                                <a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;ns)
                         throws <a href="https://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 interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html#preModifyNamespace-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.NamespaceDescriptor-">MasterObserver</a></code></span></div>
@@ -679,7 +679,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>preCloneSnapshot</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.449">preCloneSnapshot</a>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.505">preCloneSnapshot</a>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                              <a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescription</a>&nbsp;snapshot,
                              <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="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>
@@ -704,7 +704,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>postClearDeadServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.455">postClearDeadServers</a>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.511">postClearDeadServers</a>(<a href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" title="interface in org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessorEnvironment</a>&gt;&nbsp;ctx,
                                  <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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;notClearedServers)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -724,7 +724,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockList">
 <li class="blockList">
 <h4>checkPermission</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.465">checkPermission</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;request)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.521">checkPermission</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;request)
                      throws <a href="https://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>
@@ -738,7 +738,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCop
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getActiveUser</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.474">getActiveUser</a>()
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.530">getActiveUser</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 the active user to which authorization checks should be applied.
  If we are in the context of an RPC call, the remote user is used,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html
index 318edf4..0b4078b 100644
--- a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html
+++ b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html
@@ -587,7 +587,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>moveTables</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.381">moveTables</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tables,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.375">moveTables</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tables,
                        <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;targetGroup)
                 throws <a href="https://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 interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.html#moveTables-java.util.Set-java.lang.String-">RSGroupAdmin</a></code></span></div>
@@ -607,7 +607,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>addRSGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.441">addRSGroup</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;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.428">addRSGroup</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)
                 throws <a href="https://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 interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.html#addRSGroup-java.lang.String-">RSGroupAdmin</a></code></span></div>
 <div class="block">Creates a new RegionServer group with the given name.</div>
@@ -625,7 +625,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>removeRSGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.452">removeRSGroup</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;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.433">removeRSGroup</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)
                    throws <a href="https://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 interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.html#removeRSGroup-java.lang.String-">RSGroupAdmin</a></code></span></div>
 <div class="block">Removes RegionServer group associated with the given name.</div>
@@ -643,7 +643,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>balanceRSGroup</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.490">balanceRSGroup</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;groupName)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.465">balanceRSGroup</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;groupName)
                        throws <a href="https://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 interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.html#balanceRSGroup-java.lang.String-">RSGroupAdmin</a></code></span></div>
 <div class="block">Balance regions in the given RegionServer group.</div>
@@ -663,7 +663,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>listRSGroups</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="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.553">listRSGroups</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;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.522">listRSGroups</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 interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.html#listRSGroups--">RSGroupAdmin</a></code></span></div>
 <div class="block">Lists current set of RegionServer groups.</div>
@@ -681,7 +681,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSGroupOfServer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.558">getRSGroupOfServer</a>(<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&nbsp;hostPort)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.527">getRSGroupOfServer</a>(<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&nbsp;hostPort)
                                throws <a href="https://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 interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.html#getRSGroupOfServer-org.apache.hadoop.hbase.net.Address-">RSGroupAdmin</a></code></span></div>
 <div class="block">Retrieve the RSGroupInfo a server is affiliated to</div>
@@ -701,7 +701,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>moveServersAndTables</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.563">moveServersAndTables</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.532">moveServersAndTables</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tables,
                                  <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;targetGroup)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -725,7 +725,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>removeServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.602">removeServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.564">removeServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.html#removeServers-java.util.Set-">RSGroupAdmin</a></code></span></div>
 <div class="block">Remove decommissioned servers from rsgroup.
@@ -749,7 +749,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>rsGroupGetRegionsInTransition</h4>
-<pre>private&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="../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.624">rsGroupGetRegionsInTransition</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;groupName)
+<pre>private&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="../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.580">rsGroupGetRegionsInTransition</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;groupName)
                                                        throws <a href="https://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>
@@ -763,7 +763,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSGroupAssignmentsByTable</h4>
-<pre>private&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="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</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;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.640">getRSGroupAssignmentsByTable</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;groupName)
+<pre>private&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="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</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;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.596">getRSGroupAssignmentsByTable</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;groupName)
                                                                               throws <a href="https://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>
@@ -777,7 +777,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>checkForDeadOrOnlineServers</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.680">checkForDeadOrOnlineServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html#line.636">checkForDeadOrOnlineServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers)
                                   throws <a href="../../../../../org/apache/hadoop/hbase/constraint/ConstraintException.html" title="class in org.apache.hadoop.hbase.constraint">ConstraintException</a></pre>
 <div class="block">Check if the set of servers are belong to dead servers list or online servers list.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
index 195374c..f13a3ef 100644
--- a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
+++ b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
@@ -604,7 +604,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>randomAssignment</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.248">randomAssignment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.256">randomAssignment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                                    <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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
                             throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#randomAssignment-org.apache.hadoop.hbase.client.RegionInfo-java.util.List-">LoadBalancer</a></code></span></div>
@@ -627,7 +627,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>generateGroupMaps</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.257">generateGroupMaps</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;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.265">generateGroupMaps</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;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions,
                                <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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers,
                                org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&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/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regionMap,
                                org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap&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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;serverMap)
@@ -644,7 +644,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>filterOfflineServers</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;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.282">filterOfflineServers</a>(<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;RSGroupInfo,
+<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;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.291">filterOfflineServers</a>(<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;RSGroupInfo,
                                               <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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;onlineServers)</pre>
 </li>
 </ul>
@@ -654,7 +654,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>filterServers</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;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.301">filterServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
+<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;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.310">filterServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;onlineServers)</pre>
 <div class="block">Filter servers based on the online servers.</div>
 <dl>
@@ -672,7 +672,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>getMisplacedRegions</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.319">getMisplacedRegions</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="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;regions)
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.328">getMisplacedRegions</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="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;regions)
                                     throws <a href="https://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>
@@ -686,7 +686,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>correctAssignments</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</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;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;,<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="../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&gt;&nbsp;<a href="../../../..
 /../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.347">correctAssignments</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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</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;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;existingAssignments)
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</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;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;,<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="../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&gt;&nbsp;<a href="../../../..
 /../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.360">correctAssignments</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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</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;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;existingAssignments)
                                                                             throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -700,7 +700,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>initialize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.382">initialize</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.399">initialize</a>()
                 throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#initialize--">LoadBalancer</a></code></span></div>
 <div class="block">Initialize the load balancer. Must be called after setters.</div>
@@ -718,7 +718,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>isOnline</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.414">isOnline</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.431">isOnline</a>()</pre>
 </li>
 </ul>
 <a name="setClusterLoad-java.util.Map-">
@@ -727,7 +727,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>setClusterLoad</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.423">setClusterLoad</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="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</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;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&gt;&nbsp;clusterLoad)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.440">setClusterLoad</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="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</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;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&gt;&nbsp;clusterLoad)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#setClusterLoad-java.util.Map-">LoadBalancer</a></code></span></div>
 <div class="block">Pass RegionStates and allow balancer to set the current cluster load.</div>
 <dl>
@@ -742,7 +742,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>regionOnline</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.427">regionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.444">regionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                          <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#regionOnline-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">LoadBalancer</a></code></span></div>
 <div class="block">Marks the region as online at balancer.</div>
@@ -758,7 +758,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>regionOffline</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.431">regionOffline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.448">regionOffline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#regionOffline-org.apache.hadoop.hbase.client.RegionInfo-">LoadBalancer</a></code></span></div>
 <div class="block">Marks the region as offline at balancer.</div>
 <dl>
@@ -773,7 +773,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>onConfigurationChange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.435">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.452">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserver.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">ConfigurationObserver</a></code></span></div>
 <div class="block">This method would be called by the <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf"><code>ConfigurationManager</code></a>
  object when the <code>Configuration</code> object is reloaded from disk.</div>
@@ -791,7 +791,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.440">stop</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;why)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.457">stop</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;why)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#stop-java.lang.String-">Stoppable</a></code></span></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -809,7 +809,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.444">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.461">isStopped</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#isStopped--">isStopped</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></dd>
@@ -824,7 +824,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setRsGroupInfoManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.449">setRsGroupInfoManager</a>(<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a>&nbsp;rsGroupInfoManager)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.466">setRsGroupInfoManager</a>(<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a>&nbsp;rsGroupInfoManager)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html
index faf6b20..71ab8c3 100644
--- a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html
+++ b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.687">RSGroupInfoManagerImpl.FailedOpenUpdaterThread</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.671">RSGroupInfoManagerImpl.FailedOpenUpdaterThread</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/master/ServerListener.html" title="interface in org.apache.hadoop.hbase.master">ServerListener</a></pre>
 </li>
@@ -267,7 +267,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/ServerListener
 <ul class="blockList">
 <li class="blockList">
 <h4>waitInterval</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html#line.688">waitInterval</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html#line.672">waitInterval</a></pre>
 </li>
 </ul>
 <a name="hasChanged">
@@ -276,7 +276,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/ServerListener
 <ul class="blockListLast">
 <li class="blockList">
 <h4>hasChanged</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html#line.689">hasChanged</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html#line.673">hasChanged</a></pre>
 </li>
 </ul>
 </li>
@@ -293,7 +293,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/ServerListener
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FailedOpenUpdaterThread</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html#line.691">FailedOpenUpdaterThread</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html#line.675">FailedOpenUpdaterThread</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 </li>
@@ -310,7 +310,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/ServerListener
 <ul class="blockList">
 <li class="blockList">
 <h4>serverAdded</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html#line.698">serverAdded</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html#line.682">serverAdded</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/ServerListener.html#serverAdded-org.apache.hadoop.hbase.ServerName-">ServerListener</a></code></span></div>
 <div class="block">The server has joined the cluster.</div>
 <dl>
@@ -327,7 +327,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/ServerListener
 <ul class="blockList">
 <li class="blockList">
 <h4>serverRemoved</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html#line.703">serverRemoved</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html#line.687">serverRemoved</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/ServerListener.html#serverRemoved-org.apache.hadoop.hbase.ServerName-">ServerListener</a></code></span></div>
 <div class="block">The server was removed from the cluster.</div>
 <dl>
@@ -344,7 +344,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/ServerListener
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html#line.707">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html#line.691">run</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/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
@@ -359,7 +359,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/ServerListener
 <ul class="blockListLast">
 <li class="blockList">
 <h4>serverChanged</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html#line.740">serverChanged</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html#line.724">serverChanged</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html
index 5ecea02..f64b6c3 100644
--- a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html
+++ b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.748">RSGroupInfoManagerImpl.RSGroupStartupWorker</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.732">RSGroupInfoManagerImpl.RSGroupStartupWorker</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></pre>
 </li>
 </ul>
@@ -255,7 +255,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html#line.749">LOG</a></pre>
+<pre>private final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html#line.733">LOG</a></pre>
 </li>
 </ul>
 <a name="online">
@@ -264,7 +264,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>online</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html#line.750">online</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html#line.734">online</a></pre>
 </li>
 </ul>
 </li>
@@ -281,7 +281,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RSGroupStartupWorker</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html#line.752">RSGroupStartupWorker</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html#line.736">RSGroupStartupWorker</a>()</pre>
 </li>
 </ul>
 </li>
@@ -298,7 +298,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html#line.757">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html#line.741">run</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/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
@@ -313,7 +313,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForGroupTableOnline</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html#line.764">waitForGroupTableOnline</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html#line.748">waitForGroupTableOnline</a>()</pre>
 </li>
 </ul>
 <a name="createRSGroupTable--">
@@ -322,7 +322,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createRSGroupTable</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html#line.873">createRSGroupTable</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html#line.857">createRSGroupTable</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>
@@ -336,7 +336,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isOnline</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html#line.898">isOnline</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html#line.882">isOnline</a>()</pre>
 </li>
 </ul>
 </li>


[47/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/apidocs/src-html/org/apache/hadoop/hbase/util/Bytes.ByteArrayComparator.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/util/Bytes.ByteArrayComparator.html b/apidocs/src-html/org/apache/hadoop/hbase/util/Bytes.ByteArrayComparator.html
index a242321..b2c1cc6 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/util/Bytes.ByteArrayComparator.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/util/Bytes.ByteArrayComparator.html
@@ -1557,7 +1557,7 @@
 <span class="sourceLineNo">1549</span>          long lw = theUnsafe.getLong(buffer1, offset1Adj + i);<a name="line.1549"></a>
 <span class="sourceLineNo">1550</span>          long rw = theUnsafe.getLong(buffer2, offset2Adj + i);<a name="line.1550"></a>
 <span class="sourceLineNo">1551</span>          if (lw != rw) {<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.littleEndian) {<a name="line.1552"></a>
+<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.LITTLE_ENDIAN) {<a name="line.1552"></a>
 <span class="sourceLineNo">1553</span>              return ((lw + Long.MIN_VALUE) &lt; (rw + Long.MIN_VALUE)) ? -1 : 1;<a name="line.1553"></a>
 <span class="sourceLineNo">1554</span>            }<a name="line.1554"></a>
 <span class="sourceLineNo">1555</span><a name="line.1555"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/apidocs/src-html/org/apache/hadoop/hbase/util/Bytes.RowEndKeyComparator.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/util/Bytes.RowEndKeyComparator.html b/apidocs/src-html/org/apache/hadoop/hbase/util/Bytes.RowEndKeyComparator.html
index a242321..b2c1cc6 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/util/Bytes.RowEndKeyComparator.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/util/Bytes.RowEndKeyComparator.html
@@ -1557,7 +1557,7 @@
 <span class="sourceLineNo">1549</span>          long lw = theUnsafe.getLong(buffer1, offset1Adj + i);<a name="line.1549"></a>
 <span class="sourceLineNo">1550</span>          long rw = theUnsafe.getLong(buffer2, offset2Adj + i);<a name="line.1550"></a>
 <span class="sourceLineNo">1551</span>          if (lw != rw) {<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.littleEndian) {<a name="line.1552"></a>
+<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.LITTLE_ENDIAN) {<a name="line.1552"></a>
 <span class="sourceLineNo">1553</span>              return ((lw + Long.MIN_VALUE) &lt; (rw + Long.MIN_VALUE)) ? -1 : 1;<a name="line.1553"></a>
 <span class="sourceLineNo">1554</span>            }<a name="line.1554"></a>
 <span class="sourceLineNo">1555</span><a name="line.1555"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/apidocs/src-html/org/apache/hadoop/hbase/util/Bytes.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/util/Bytes.html b/apidocs/src-html/org/apache/hadoop/hbase/util/Bytes.html
index a242321..b2c1cc6 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/util/Bytes.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/util/Bytes.html
@@ -1557,7 +1557,7 @@
 <span class="sourceLineNo">1549</span>          long lw = theUnsafe.getLong(buffer1, offset1Adj + i);<a name="line.1549"></a>
 <span class="sourceLineNo">1550</span>          long rw = theUnsafe.getLong(buffer2, offset2Adj + i);<a name="line.1550"></a>
 <span class="sourceLineNo">1551</span>          if (lw != rw) {<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.littleEndian) {<a name="line.1552"></a>
+<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.LITTLE_ENDIAN) {<a name="line.1552"></a>
 <span class="sourceLineNo">1553</span>              return ((lw + Long.MIN_VALUE) &lt; (rw + Long.MIN_VALUE)) ? -1 : 1;<a name="line.1553"></a>
 <span class="sourceLineNo">1554</span>            }<a name="line.1554"></a>
 <span class="sourceLineNo">1555</span><a name="line.1555"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index f3361e3..185f280 100644
--- a/book.html
+++ b/book.html
@@ -37873,7 +37873,7 @@ The server will return cellblocks compressed using this same compressor as long
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2018-05-23 14:30:23 UTC
+Last updated 2018-05-24 14:29:53 UTC
 </div>
 </div>
 </body>

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


[30/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/CellComparatorImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/CellComparatorImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/CellComparatorImpl.html
index 05d2c3c..6e02e32 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/CellComparatorImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/CellComparatorImpl.html
@@ -26,441 +26,376 @@
 <span class="sourceLineNo">018</span><a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.KeyValue.Type;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.slf4j.Logger;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.slf4j.LoggerFactory;<a name="line.27"></a>
-<span class="sourceLineNo">028</span><a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hbase.thirdparty.com.google.common.primitives.Longs;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
-<span class="sourceLineNo">032</span> * Compare two HBase cells.  Do not use this method comparing &lt;code&gt;-ROOT-&lt;/code&gt; or<a name="line.32"></a>
-<span class="sourceLineNo">033</span> * &lt;code&gt;hbase:meta&lt;/code&gt; cells.  Cells from these tables need a specialized comparator, one that<a name="line.33"></a>
-<span class="sourceLineNo">034</span> * takes account of the special formatting of the row where we have commas to delimit table from<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * regionname, from row.  See KeyValue for how it has a special comparator to do hbase:meta cells<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * and yet another for -ROOT-.<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * While using this comparator for {{@link #compareRows(Cell, Cell)} et al, the hbase:meta cells<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * format should be taken into consideration, for which the instance of this comparator<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * should be used.  In all other cases the static APIs in this comparator would be enough<a name="line.39"></a>
-<span class="sourceLineNo">040</span> */<a name="line.40"></a>
-<span class="sourceLineNo">041</span>@edu.umd.cs.findbugs.annotations.SuppressWarnings(<a name="line.41"></a>
-<span class="sourceLineNo">042</span>    value="UNKNOWN",<a name="line.42"></a>
-<span class="sourceLineNo">043</span>    justification="Findbugs doesn't like the way we are negating the result of a compare in below")<a name="line.43"></a>
-<span class="sourceLineNo">044</span>@InterfaceAudience.Private<a name="line.44"></a>
-<span class="sourceLineNo">045</span>@InterfaceStability.Evolving<a name="line.45"></a>
-<span class="sourceLineNo">046</span>public class CellComparatorImpl implements CellComparator {<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  static final Logger LOG = LoggerFactory.getLogger(CellComparatorImpl.class);<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  /**<a name="line.48"></a>
-<span class="sourceLineNo">049</span>   * Comparator for plain key/values; i.e. non-catalog table key/values. Works on Key portion<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   * of KeyValue only.<a name="line.50"></a>
-<span class="sourceLineNo">051</span>   */<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  public static final CellComparatorImpl COMPARATOR = new CellComparatorImpl();<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  /**<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * A {@link CellComparatorImpl} for &lt;code&gt;hbase:meta&lt;/code&gt; catalog table<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   * {@link KeyValue}s.<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   */<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  public static final CellComparatorImpl META_COMPARATOR = new MetaCellComparator();<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  @Override<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  public int compare(Cell a, Cell b) {<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    return compare(a, b, false);<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  }<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>   * Compare cells.<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   * @param ignoreSequenceid True if we are to compare the key portion only and ignore<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   *  the sequenceid. Set to false to compare key and consider sequenceid.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * @return 0 if equal, -1 if a &amp;lt; b, and +1 if a &amp;gt; b.<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  @Override<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  public int compare(final Cell a, final Cell b, boolean ignoreSequenceid) {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    int diff = 0;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    if (a instanceof ByteBufferKeyValue &amp;&amp; b instanceof ByteBufferKeyValue) {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>      diff = compareByteBufferKeyValue((ByteBufferKeyValue)a, (ByteBufferKeyValue)b);<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      if (diff != 0) {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>        return diff;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      }<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    } else {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      diff = compareRows(a, b);<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      if (diff != 0) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>        return diff;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      }<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>      diff = compareWithoutRow(a, b);<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      if (diff != 0) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        return diff;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      }<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>    // Negate following comparisons so later edits show up first mvccVersion: later sorts first<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    return ignoreSequenceid? diff: Longs.compare(b.getSequenceId(), a.getSequenceId());<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  }<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>   * Specialized comparator for the ByteBufferKeyValue type exclusivesly.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * Caches deserialized lengths of rows and families, etc., and reuses them where it can<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * (ByteBufferKeyValue has been changed to be amenable to our providing pre-made lengths, etc.)<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   */<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private static final int compareByteBufferKeyValue(ByteBufferKeyValue left,<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      ByteBufferKeyValue right) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    // Compare Rows. Cache row length.<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    int leftRowLength = left.getRowLength();<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    int rightRowLength = right.getRowLength();<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    int diff = ByteBufferUtils.compareTo(<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        left.getRowByteBuffer(), left.getRowPosition(), leftRowLength,<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        right.getRowByteBuffer(), right.getRowPosition(), rightRowLength);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    if (diff != 0) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      return diff;<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>    // If the column is not specified, the "minimum" key type appears the<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    // latest in the sorted order, regardless of the timestamp. This is used<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    // for specifying the last key/value in a given row, because there is no<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // "lexicographically last column" (it would be infinitely long). The<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    // "maximum" key type does not need this behavior.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    // Copied from KeyValue. This is bad in that we can't do memcmp w/ special rules like this.<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    // I tried to get rid of the above but scanners depend on it. TODO.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    int leftFamilyLengthPosition = left.getFamilyLengthPosition(leftRowLength);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    int leftFamilyLength = left.getFamilyLength(leftFamilyLengthPosition);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    int rightFamilyLengthPosition = right.getFamilyLengthPosition(rightRowLength);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    int rightFamilyLength = right.getFamilyLength(rightFamilyLengthPosition);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    int leftKeyLength = left.getKeyLength();<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    int leftQualifierLength = left.getQualifierLength(leftKeyLength, leftRowLength,<a name="line.123"></a>
-<span class="sourceLineNo">124</span>        leftFamilyLength);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    byte leftType = left.getTypeByte(leftKeyLength);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    if (leftFamilyLength + leftQualifierLength == 0 &amp;&amp; leftType == Type.Minimum.getCode()) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      // left is "bigger", i.e. it appears later in the sorted order<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      return 1;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    int rightKeyLength = right.getKeyLength();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    int rightQualifierLength = right.getQualifierLength(rightKeyLength, rightRowLength,<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        rightFamilyLength);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    byte rightType = right.getTypeByte(rightKeyLength);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    if (rightFamilyLength + rightQualifierLength == 0 &amp;&amp; rightType == Type.Minimum.getCode()) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      return -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>    // Compare families.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    int leftFamilyPosition = left.getFamilyPosition(leftFamilyLengthPosition);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    int rightFamilyPosition = right.getFamilyPosition(rightFamilyLengthPosition);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    diff = ByteBufferUtils.compareTo(<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        left.getFamilyByteBuffer(), leftFamilyPosition, leftFamilyLength,<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        right.getFamilyByteBuffer(), rightFamilyPosition, rightFamilyLength);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    if (diff != 0) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      return diff;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    // Compare qualifiers<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    diff = ByteBufferUtils.compareTo(left.getQualifierByteBuffer(),<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        left.getQualifierPosition(leftFamilyPosition, leftFamilyLength), leftQualifierLength,<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        right.getQualifierByteBuffer(),<a name="line.150"></a>
-<span class="sourceLineNo">151</span>        right.getQualifierPosition(rightFamilyPosition, rightFamilyLength),<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        rightQualifierLength);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    if (diff != 0) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return diff;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    // Timestamps.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    diff = compareTimestampsInternal(left.getTimestamp(leftKeyLength),<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        right.getTimestamp(rightKeyLength));<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    if (diff != 0) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      return diff;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    // Compare types. Let the delete types sort ahead of puts; i.e. types<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    // of higher numbers sort before those of lesser numbers. Maximum (255)<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    // appears ahead of everything, and minimum (0) appears after<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    // everything.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    return (0xff &amp; rightType) - (0xff &amp; leftType);<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>  /**<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * Compares the family and qualifier part of the cell<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * @return 0 if both cells are equal, 1 if left cell is bigger than right, -1 otherwise<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public final int compareColumns(final Cell left, final Cell right) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    int diff = compareFamilies(left, right);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    if (diff != 0) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      return diff;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    return compareQualifiers(left, right);<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>  /**<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * Compare the families of left and right cell<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * @return 0 if both cells are equal, 1 if left cell is bigger than right, -1 otherwise<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 final int compareFamilies(Cell left, Cell right) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getFamilyByteBuffer(),<a name="line.188"></a>
-<span class="sourceLineNo">189</span>          ((ByteBufferExtendedCell) left).getFamilyPosition(), left.getFamilyLength(),<a name="line.189"></a>
-<span class="sourceLineNo">190</span>          ((ByteBufferExtendedCell) right).getFamilyByteBuffer(),<a name="line.190"></a>
-<span class="sourceLineNo">191</span>          ((ByteBufferExtendedCell) right).getFamilyPosition(), right.getFamilyLength());<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    if (left instanceof ByteBufferExtendedCell) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getFamilyByteBuffer(),<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          ((ByteBufferExtendedCell) left).getFamilyPosition(), left.getFamilyLength(),<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          right.getFamilyArray(), right.getFamilyOffset(), right.getFamilyLength());<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    if (right instanceof ByteBufferExtendedCell) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // Notice how we flip the order of the compare here. We used to negate the return value but<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      // see what FindBugs says<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      // http://findbugs.sourceforge.net/bugDescriptions.html#RV_NEGATING_RESULT_OF_COMPARETO<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      // It suggest flipping the order to get same effect and 'safer'.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      return ByteBufferUtils.compareTo(<a name="line.203"></a>
-<span class="sourceLineNo">204</span>          left.getFamilyArray(), left.getFamilyOffset(), left.getFamilyLength(),<a name="line.204"></a>
-<span class="sourceLineNo">205</span>          ((ByteBufferExtendedCell)right).getFamilyByteBuffer(),<a name="line.205"></a>
-<span class="sourceLineNo">206</span>          ((ByteBufferExtendedCell)right).getFamilyPosition(), right.getFamilyLength());<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    return Bytes.compareTo(left.getFamilyArray(), left.getFamilyOffset(), left.getFamilyLength(),<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        right.getFamilyArray(), right.getFamilyOffset(), right.getFamilyLength());<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>  /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * Compare the qualifiers part of the left and right cells.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * @return 0 if both cells are equal, 1 if left cell is bigger than right, -1 otherwise<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   */<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  @Override<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  public final int compareQualifiers(Cell left, Cell right) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      return ByteBufferUtils<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          .compareTo(((ByteBufferExtendedCell) left).getQualifierByteBuffer(),<a name="line.220"></a>
-<span class="sourceLineNo">221</span>              ((ByteBufferExtendedCell) left).getQualifierPosition(),<a name="line.221"></a>
-<span class="sourceLineNo">222</span>              left.getQualifierLength(), ((ByteBufferExtendedCell) right).getQualifierByteBuffer(),<a name="line.222"></a>
-<span class="sourceLineNo">223</span>              ((ByteBufferExtendedCell) right).getQualifierPosition(),<a name="line.223"></a>
-<span class="sourceLineNo">224</span>              right.getQualifierLength());<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    if (left instanceof ByteBufferExtendedCell) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getQualifierByteBuffer(),<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          ((ByteBufferExtendedCell) left).getQualifierPosition(), left.getQualifierLength(),<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          right.getQualifierArray(), right.getQualifierOffset(), right.getQualifierLength());<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    if (right instanceof ByteBufferExtendedCell) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      // Notice how we flip the order of the compare here. We used to negate the return value but<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // see what FindBugs says<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      // http://findbugs.sourceforge.net/bugDescriptions.html#RV_NEGATING_RESULT_OF_COMPARETO<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      // It suggest flipping the order to get same effect and 'safer'.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      return ByteBufferUtils.compareTo(left.getQualifierArray(),<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          left.getQualifierOffset(), left.getQualifierLength(),<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          ((ByteBufferExtendedCell)right).getQualifierByteBuffer(),<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          ((ByteBufferExtendedCell)right).getQualifierPosition(), right.getQualifierLength());<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    return Bytes.compareTo(left.getQualifierArray(), left.getQualifierOffset(),<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        left.getQualifierLength(), right.getQualifierArray(), right.getQualifierOffset(),<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        right.getQualifierLength());<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>  /**<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * Compares the rows of the left and right cell.<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * For the hbase:meta case this method is overridden such that it can handle hbase:meta cells.<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * The caller should ensure using the appropriate comparator for hbase:meta.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * @return 0 if both cells are equal, 1 if left cell is bigger than right, -1 otherwise<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 int compareRows(final Cell left, final Cell right) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    return compareRows(left, left.getRowLength(), right, right.getRowLength());<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>  int compareRows(final Cell left, int leftRowLength, final Cell right, int rightRowLength) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    // left and right can be exactly the same at the beginning of a row<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    if (left == right) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      return 0;<a name="line.260"></a>
+<span class="sourceLineNo">021</span>import java.util.Comparator;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.KeyValue.Type;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<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.apache.hbase.thirdparty.com.google.common.primitives.Longs;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.slf4j.Logger;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.slf4j.LoggerFactory;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span><a name="line.33"></a>
+<span class="sourceLineNo">034</span>/**<a name="line.34"></a>
+<span class="sourceLineNo">035</span> * Compare two HBase cells.  Do not use this method comparing &lt;code&gt;-ROOT-&lt;/code&gt; or<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * &lt;code&gt;hbase:meta&lt;/code&gt; cells.  Cells from these tables need a specialized comparator, one that<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * takes account of the special formatting of the row where we have commas to delimit table from<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * regionname, from row.  See KeyValue for how it has a special comparator to do hbase:meta cells<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * and yet another for -ROOT-.<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * &lt;p&gt;While using this comparator for {{@link #compareRows(Cell, Cell)} et al, the hbase:meta cells<a name="line.40"></a>
+<span class="sourceLineNo">041</span> * format should be taken into consideration, for which the instance of this comparator<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * should be used.  In all other cases the static APIs in this comparator would be enough<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * &lt;p&gt;HOT methods. We spend a good portion of CPU comparing. Anything that makes the compare<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * faster will likely manifest at the macro level. See also<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * {@link BBKVComparator}. Use it when mostly {@link ByteBufferKeyValue}s.<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * &lt;/p&gt;<a name="line.46"></a>
+<span class="sourceLineNo">047</span> */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>@edu.umd.cs.findbugs.annotations.SuppressWarnings(<a name="line.48"></a>
+<span class="sourceLineNo">049</span>    value="UNKNOWN",<a name="line.49"></a>
+<span class="sourceLineNo">050</span>    justification="Findbugs doesn't like the way we are negating the result of a compare in below")<a name="line.50"></a>
+<span class="sourceLineNo">051</span>@InterfaceAudience.Private<a name="line.51"></a>
+<span class="sourceLineNo">052</span>@InterfaceStability.Evolving<a name="line.52"></a>
+<span class="sourceLineNo">053</span>public class CellComparatorImpl implements CellComparator {<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  static final Logger LOG = LoggerFactory.getLogger(CellComparatorImpl.class);<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  /**<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   * Comparator for plain key/values; i.e. non-catalog table key/values. Works on Key portion<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   * of KeyValue only.<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  public static final CellComparatorImpl COMPARATOR = new CellComparatorImpl();<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  /**<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * A {@link CellComparatorImpl} for &lt;code&gt;hbase:meta&lt;/code&gt; catalog table<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * {@link KeyValue}s.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   */<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  public static final CellComparatorImpl META_COMPARATOR = new MetaCellComparator();<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  @Override<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  public final int compare(final Cell a, final Cell b) {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    return compare(a, b, false);<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 int compare(final Cell a, final Cell b, boolean ignoreSequenceid) {<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>    int diff = 0;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    // "Peel off" the most common path.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    if (a instanceof ByteBufferKeyValue &amp;&amp; b instanceof ByteBufferKeyValue) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      diff = BBKVComparator.compare((ByteBufferKeyValue)a, (ByteBufferKeyValue)b);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      if (diff != 0) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>        return diff;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      }<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    } else {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      diff = compareRows(a, b);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      if (diff != 0) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>        return diff;<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>      diff = compareWithoutRow(a, b);<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      if (diff != 0) {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>        return diff;<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>    // Negate following comparisons so later edits show up first mvccVersion: later sorts first<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    return ignoreSequenceid? diff: Long.compare(b.getSequenceId(), a.getSequenceId());<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>  /**<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * Compares the family and qualifier part of the cell<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * @return 0 if both cells are equal, 1 if left cell is bigger than right, -1 otherwise<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   */<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public final int compareColumns(final Cell left, final Cell right) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    int diff = compareFamilies(left, right);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (diff != 0) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      return diff;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    return compareQualifiers(left, right);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * Compare the families of left and right cell<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * @return 0 if both cells are equal, 1 if left cell is bigger than right, -1 otherwise<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public final int compareFamilies(Cell left, Cell right) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getFamilyByteBuffer(),<a name="line.116"></a>
+<span class="sourceLineNo">117</span>          ((ByteBufferExtendedCell) left).getFamilyPosition(), left.getFamilyLength(),<a name="line.117"></a>
+<span class="sourceLineNo">118</span>          ((ByteBufferExtendedCell) right).getFamilyByteBuffer(),<a name="line.118"></a>
+<span class="sourceLineNo">119</span>          ((ByteBufferExtendedCell) right).getFamilyPosition(), right.getFamilyLength());<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    if (left instanceof ByteBufferExtendedCell) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getFamilyByteBuffer(),<a name="line.122"></a>
+<span class="sourceLineNo">123</span>          ((ByteBufferExtendedCell) left).getFamilyPosition(), left.getFamilyLength(),<a name="line.123"></a>
+<span class="sourceLineNo">124</span>          right.getFamilyArray(), right.getFamilyOffset(), right.getFamilyLength());<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    if (right instanceof ByteBufferExtendedCell) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      // Notice how we flip the order of the compare here. We used to negate the return value but<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      // see what FindBugs says<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      // http://findbugs.sourceforge.net/bugDescriptions.html#RV_NEGATING_RESULT_OF_COMPARETO<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      // It suggest flipping the order to get same effect and 'safer'.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      return ByteBufferUtils.compareTo(<a name="line.131"></a>
+<span class="sourceLineNo">132</span>          left.getFamilyArray(), left.getFamilyOffset(), left.getFamilyLength(),<a name="line.132"></a>
+<span class="sourceLineNo">133</span>          ((ByteBufferExtendedCell)right).getFamilyByteBuffer(),<a name="line.133"></a>
+<span class="sourceLineNo">134</span>          ((ByteBufferExtendedCell)right).getFamilyPosition(), right.getFamilyLength());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    }<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    return Bytes.compareTo(left.getFamilyArray(), left.getFamilyOffset(), left.getFamilyLength(),<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        right.getFamilyArray(), right.getFamilyOffset(), right.getFamilyLength());<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>  /**<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * Compare the qualifiers part of the left and right cells.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   * @return 0 if both cells are equal, 1 if left cell is bigger than right, -1 otherwise<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   */<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  public final int compareQualifiers(Cell left, Cell right) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      return ByteBufferUtils<a name="line.147"></a>
+<span class="sourceLineNo">148</span>          .compareTo(((ByteBufferExtendedCell) left).getQualifierByteBuffer(),<a name="line.148"></a>
+<span class="sourceLineNo">149</span>              ((ByteBufferExtendedCell) left).getQualifierPosition(),<a name="line.149"></a>
+<span class="sourceLineNo">150</span>              left.getQualifierLength(), ((ByteBufferExtendedCell) right).getQualifierByteBuffer(),<a name="line.150"></a>
+<span class="sourceLineNo">151</span>              ((ByteBufferExtendedCell) right).getQualifierPosition(),<a name="line.151"></a>
+<span class="sourceLineNo">152</span>              right.getQualifierLength());<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    if (left instanceof ByteBufferExtendedCell) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getQualifierByteBuffer(),<a name="line.155"></a>
+<span class="sourceLineNo">156</span>          ((ByteBufferExtendedCell) left).getQualifierPosition(), left.getQualifierLength(),<a name="line.156"></a>
+<span class="sourceLineNo">157</span>          right.getQualifierArray(), right.getQualifierOffset(), right.getQualifierLength());<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    if (right instanceof ByteBufferExtendedCell) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      // Notice how we flip the order of the compare here. We used to negate the return value but<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      // see what FindBugs says<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      // http://findbugs.sourceforge.net/bugDescriptions.html#RV_NEGATING_RESULT_OF_COMPARETO<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      // It suggest flipping the order to get same effect and 'safer'.<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      return ByteBufferUtils.compareTo(left.getQualifierArray(),<a name="line.164"></a>
+<span class="sourceLineNo">165</span>          left.getQualifierOffset(), left.getQualifierLength(),<a name="line.165"></a>
+<span class="sourceLineNo">166</span>          ((ByteBufferExtendedCell)right).getQualifierByteBuffer(),<a name="line.166"></a>
+<span class="sourceLineNo">167</span>          ((ByteBufferExtendedCell)right).getQualifierPosition(), right.getQualifierLength());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    return Bytes.compareTo(left.getQualifierArray(), left.getQualifierOffset(),<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        left.getQualifierLength(), right.getQualifierArray(), right.getQualifierOffset(),<a name="line.170"></a>
+<span class="sourceLineNo">171</span>        right.getQualifierLength());<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>  /**<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * Compares the rows of the left and right cell.<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * For the hbase:meta case this method is overridden such that it can handle hbase:meta cells.<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * The caller should ensure using the appropriate comparator for hbase:meta.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   * @return 0 if both cells are equal, 1 if left cell is bigger than right, -1 otherwise<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 int compareRows(final Cell left, final Cell right) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    return compareRows(left, left.getRowLength(), right, right.getRowLength());<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>  static int compareRows(final Cell left, int leftRowLength, final Cell right, int rightRowLength) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    // left and right can be exactly the same at the beginning of a row<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    if (left == right) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      return 0;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getRowByteBuffer(),<a name="line.191"></a>
+<span class="sourceLineNo">192</span>          ((ByteBufferExtendedCell) left).getRowPosition(), leftRowLength,<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          ((ByteBufferExtendedCell) right).getRowByteBuffer(),<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          ((ByteBufferExtendedCell) right).getRowPosition(), rightRowLength);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    if (left instanceof ByteBufferExtendedCell) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getRowByteBuffer(),<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          ((ByteBufferExtendedCell) left).getRowPosition(), leftRowLength,<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          right.getRowArray(), right.getRowOffset(), rightRowLength);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    if (right instanceof ByteBufferExtendedCell) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      // Notice how we flip the order of the compare here. We used to negate the return value but<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      // see what FindBugs says<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      // http://findbugs.sourceforge.net/bugDescriptions.html#RV_NEGATING_RESULT_OF_COMPARETO<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      // It suggest flipping the order to get same effect and 'safer'.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      return ByteBufferUtils.compareTo(left.getRowArray(), left.getRowOffset(), leftRowLength,<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          ((ByteBufferExtendedCell)right).getRowByteBuffer(),<a name="line.207"></a>
+<span class="sourceLineNo">208</span>          ((ByteBufferExtendedCell)right).getRowPosition(), rightRowLength);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    return Bytes.compareTo(left.getRowArray(), left.getRowOffset(), left.getRowLength(),<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        right.getRowArray(), right.getRowOffset(), right.getRowLength());<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  }<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>   * Compares the row part of the cell with a simple plain byte[] like the<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * stopRow in Scan. This should be used with context where for hbase:meta<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * cells the {{@link #META_COMPARATOR} should be used<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   *<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * @param left<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   *          the cell to be compared<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * @param right<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   *          the kv serialized byte[] to be compared with<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * @param roffset<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   *          the offset in the byte[]<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param rlength<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   *          the length in the byte[]<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @return 0 if both cell and the byte[] are equal, 1 if the cell is bigger<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   *         than byte[], -1 otherwise<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  @Override<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  public int compareRows(Cell left, byte[] right, int roffset, int rlength) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    if (left instanceof ByteBufferExtendedCell) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getRowByteBuffer(),<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          ((ByteBufferExtendedCell) left).getRowPosition(), left.getRowLength(), right,<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          roffset, rlength);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    return Bytes.compareTo(left.getRowArray(), left.getRowOffset(), left.getRowLength(), right,<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        roffset, rlength);<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 final int compareWithoutRow(final Cell left, final Cell right) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    // If the column is not specified, the "minimum" key type appears the<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    // latest in the sorted order, regardless of the timestamp. This is used<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    // for specifying the last key/value in a given row, because there is no<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    // "lexicographically last column" (it would be infinitely long). The<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    // "maximum" key type does not need this behavior.<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    // Copied from KeyValue. This is bad in that we can't do memcmp w/ special rules like this.<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    int lFamLength = left.getFamilyLength();<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    int rFamLength = right.getFamilyLength();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    int lQualLength = left.getQualifierLength();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    int rQualLength = right.getQualifierLength();<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    if (lFamLength + lQualLength == 0<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          &amp;&amp; left.getTypeByte() == Type.Minimum.getCode()) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      // left is "bigger", i.e. it appears later in the sorted order<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      return 1;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    if (rFamLength + rQualLength == 0<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        &amp;&amp; right.getTypeByte() == Type.Minimum.getCode()) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      return -1;<a name="line.260"></a>
 <span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getRowByteBuffer(),<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          ((ByteBufferExtendedCell) left).getRowPosition(), leftRowLength,<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          ((ByteBufferExtendedCell) right).getRowByteBuffer(),<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          ((ByteBufferExtendedCell) right).getRowPosition(), rightRowLength);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    if (left instanceof ByteBufferExtendedCell) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getRowByteBuffer(),<a name="line.269"></a>
-<span class="sourceLineNo">270</span>          ((ByteBufferExtendedCell) left).getRowPosition(), leftRowLength,<a name="line.270"></a>
-<span class="sourceLineNo">271</span>          right.getRowArray(), right.getRowOffset(), rightRowLength);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (right instanceof ByteBufferExtendedCell) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      // Notice how we flip the order of the compare here. We used to negate the return value but<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      // see what FindBugs says<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      // http://findbugs.sourceforge.net/bugDescriptions.html#RV_NEGATING_RESULT_OF_COMPARETO<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      // It suggest flipping the order to get same effect and 'safer'.<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      return ByteBufferUtils.compareTo(left.getRowArray(), left.getRowOffset(), leftRowLength,<a name="line.278"></a>
-<span class="sourceLineNo">279</span>          ((ByteBufferExtendedCell)right).getRowByteBuffer(),<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          ((ByteBufferExtendedCell)right).getRowPosition(), rightRowLength);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    return Bytes.compareTo(left.getRowArray(), left.getRowOffset(), left.getRowLength(),<a name="line.282"></a>
-<span class="sourceLineNo">283</span>        right.getRowArray(), right.getRowOffset(), right.getRowLength());<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>   * Compares the row part of the cell with a simple plain byte[] like the<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * stopRow in Scan. This should be used with context where for hbase:meta<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * cells the {{@link #META_COMPARATOR} should be used<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   *<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * @param left<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   *          the cell to be compared<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * @param right<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   *          the kv serialized byte[] to be compared with<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * @param roffset<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   *          the offset in the byte[]<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @param rlength<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   *          the length in the byte[]<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * @return 0 if both cell and the byte[] are equal, 1 if the cell is bigger<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   *         than byte[], -1 otherwise<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 int compareRows(Cell left, byte[] right, int roffset, int rlength) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    if (left instanceof ByteBufferExtendedCell) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getRowByteBuffer(),<a name="line.305"></a>
-<span class="sourceLineNo">306</span>          ((ByteBufferExtendedCell) left).getRowPosition(), left.getRowLength(), right,<a name="line.306"></a>
-<span class="sourceLineNo">307</span>          roffset, rlength);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    return Bytes.compareTo(left.getRowArray(), left.getRowOffset(), left.getRowLength(), right,<a name="line.309"></a>
-<span class="sourceLineNo">310</span>        roffset, rlength);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  }<a name="line.311"></a>
+<span class="sourceLineNo">262</span>    if (lFamLength != rFamLength) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      // comparing column family is enough.<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      return compareFamilies(left, right);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    // Compare cf:qualifier<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    int diff = compareColumns(left, right);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    if (diff != 0) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      return diff;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>    diff = compareTimestamps(left.getTimestamp(), right.getTimestamp());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    if (diff != 0) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      return diff;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    // Compare types. Let the delete types sort ahead of puts; i.e. types<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    // of higher numbers sort before those of lesser numbers. Maximum (255)<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // appears ahead of everything, and minimum (0) appears after<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    // everything.<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    return (0xff &amp; right.getTypeByte()) - (0xff &amp; left.getTypeByte());<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>  @Override<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  public int compareTimestamps(final Cell left, final Cell right) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    return compareTimestamps(left.getTimestamp(), right.getTimestamp());<a name="line.286"></a>
+<span class="sourceLineNo">287</span>  }<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>  @Override<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public int compareTimestamps(final long ltimestamp, final long rtimestamp) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    // Swap order we pass into compare so we get DESCENDING order.<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return Long.compare(rtimestamp, ltimestamp);<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>   * A {@link CellComparatorImpl} for &lt;code&gt;hbase:meta&lt;/code&gt; catalog table<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   * {@link KeyValue}s.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   */<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  public static class MetaCellComparator extends CellComparatorImpl {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    // TODO: Do we need a ByteBufferKeyValue version of this?<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    @Override<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    public int compareRows(final Cell left, final Cell right) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      return compareRows(left.getRowArray(), left.getRowOffset(), left.getRowLength(),<a name="line.303"></a>
+<span class="sourceLineNo">304</span>          right.getRowArray(), right.getRowOffset(), right.getRowLength());<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 int compareRows(Cell left, byte[] right, int roffset, int rlength) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      return compareRows(left.getRowArray(), left.getRowOffset(), left.getRowLength(), right,<a name="line.309"></a>
+<span class="sourceLineNo">310</span>          roffset, rlength);<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 final int compareWithoutRow(final Cell left, final Cell right) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    // If the column is not specified, the "minimum" key type appears the<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    // latest in the sorted order, regardless of the timestamp. This is used<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    // for specifying the last key/value in a given row, because there is no<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    // "lexicographically last column" (it would be infinitely long). The<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    // "maximum" key type does not need this behavior.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    // Copied from KeyValue. This is bad in that we can't do memcmp w/ special rules like this.<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    int lFamLength = left.getFamilyLength();<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    int rFamLength = right.getFamilyLength();<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    int lQualLength = left.getQualifierLength();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    int rQualLength = right.getQualifierLength();<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    if (lFamLength + lQualLength == 0<a name="line.325"></a>
-<span class="sourceLineNo">326</span>          &amp;&amp; left.getTypeByte() == Type.Minimum.getCode()) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      // left is "bigger", i.e. it appears later in the sorted order<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      return 1;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    if (rFamLength + rQualLength == 0<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        &amp;&amp; right.getTypeByte() == Type.Minimum.getCode()) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      return -1;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    if (lFamLength != rFamLength) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      // comparing column family is enough.<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      return compareFamilies(left, right);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    // Compare cf:qualifier<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    int diff = compareColumns(left, right);<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    if (diff != 0) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      return diff;<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>    diff = compareTimestamps(left, right);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    if (diff != 0) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      return diff;<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>    // Compare types. Let the delete types sort ahead of puts; i.e. types<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    // of higher numbers sort before those of lesser numbers. Maximum (255)<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    // appears ahead of everything, and minimum (0) appears after<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    // everything.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    return (0xff &amp; right.getTypeByte()) - (0xff &amp; left.getTypeByte());<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>  @Override<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  public int compareTimestamps(final Cell left, final Cell right) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    return compareTimestampsInternal(left.getTimestamp(), right.getTimestamp());<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>  @Override<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  public int compareTimestamps(final long ltimestamp, final long rtimestamp) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    return compareTimestampsInternal(ltimestamp, rtimestamp);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  }<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>  private static final int compareTimestampsInternal(final long ltimestamp, final long rtimestamp) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    // Swap the times so sort is newest to oldest, descending.<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    return Long.compare(rtimestamp, ltimestamp);<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>   * A {@link CellComparatorImpl} for &lt;code&gt;hbase:meta&lt;/code&gt; catalog table<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * {@link KeyValue}s.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   */<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  public static class MetaCellComparator extends CellComparatorImpl {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    @Override<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    public int compareRows(final Cell left, final Cell right) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      return compareRows(left.getRowArray(), left.getRowOffset(), left.getRowLength(),<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          right.getRowArray(), right.getRowOffset(), right.getRowLength());<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 int compareRows(Cell left, byte[] right, int roffset, int rlength) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return compareRows(left.getRowArray(), left.getRowOffset(), left.getRowLength(), right,<a name="line.384"></a>
-<span class="sourceLineNo">385</span>          roffset, rlength);<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 int compare(final Cell a, final Cell b, boolean ignoreSequenceid) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      int diff = compareRows(a, b);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      if (diff != 0) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        return diff;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>      diff = compareWithoutRow(a, b);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      if (diff != 0) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        return diff;<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>      // Negate following comparisons so later edits show up first mvccVersion: later sorts first<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      return ignoreSequenceid? diff: Longs.compare(b.getSequenceId(), a.getSequenceId());<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>    private static int compareRows(byte[] left, int loffset, int llength, byte[] right, int roffset,<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        int rlength) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      int leftDelimiter = Bytes.searchDelimiterIndex(left, loffset, llength, HConstants.DELIMITER);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      int rightDelimiter = Bytes<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          .searchDelimiterIndex(right, roffset, rlength, HConstants.DELIMITER);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      // Compare up to the delimiter<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      int lpart = (leftDelimiter &lt; 0 ? llength : leftDelimiter - loffset);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      int rpart = (rightDelimiter &lt; 0 ? rlength : rightDelimiter - roffset);<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      int result = Bytes.compareTo(left, loffset, lpart, right, roffset, rpart);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      if (result != 0) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        return result;<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      } else {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &gt;= 0) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          return -1;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        } else if (rightDelimiter &lt; 0 &amp;&amp; leftDelimiter &gt;= 0) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          return 1;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        } else if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &lt; 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          return 0;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      }<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      // Compare middle bit of the row.<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      // Move past delimiter<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      leftDelimiter++;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      rightDelimiter++;<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      int leftFarDelimiter = Bytes.searchDelimiterIndexInReverse(left, leftDelimiter, llength<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          - (leftDelimiter - loffset), HConstants.DELIMITER);<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      int rightFarDelimiter = Bytes.searchDelimiterIndexInReverse(right, rightDelimiter, rlength<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          - (rightDelimiter - roffset), HConstants.DELIMITER);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      // Now compare middlesection of row.<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      lpart = (leftFarDelimiter &lt; 0 ? llength + loffset : leftFarDelimiter) - leftDelimiter;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      rpart = (rightFarDelimiter &lt; 0 ? rlength + roffset : rightFarDelimiter) - rightDelimiter;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      result = Bytes.compareTo(left, leftDelimiter, lpart, right, rightDelimiter, rpart);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      if (result != 0) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        return result;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      } else {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &gt;= 0) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>          return -1;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        } else if (rightDelimiter &lt; 0 &amp;&amp; leftDelimiter &gt;= 0) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>          return 1;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        } else if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &lt; 0) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          return 0;<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>      // Compare last part of row, the rowid.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      leftFarDelimiter++;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      rightFarDelimiter++;<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      result = Bytes.compareTo(left, leftFarDelimiter, llength - (leftFarDelimiter - loffset),<a name="line.450"></a>
-<span class="sourceLineNo">451</span>          right, rightFarDelimiter, rlength - (rightFarDelimiter - roffset));<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      return result;<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    }<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
-<span class="sourceLineNo">455</span>}<a name="line.455"></a>
+<span class="sourceLineNo">313</span>    @Override<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    public int compare(final Cell a, final Cell b, boolean ignoreSequenceid) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      int diff = compareRows(a, b);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      if (diff != 0) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        return diff;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>      diff = compareWithoutRow(a, b);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      if (diff != 0) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        return diff;<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>      // Negate following comparisons so later edits show up first mvccVersion: later sorts first<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      return ignoreSequenceid? diff: Longs.compare(b.getSequenceId(), a.getSequenceId());<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>    private static int compareRows(byte[] left, int loffset, int llength, byte[] right, int roffset,<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        int rlength) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      int leftDelimiter = Bytes.searchDelimiterIndex(left, loffset, llength, HConstants.DELIMITER);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      int rightDelimiter = Bytes<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          .searchDelimiterIndex(right, roffset, rlength, HConstants.DELIMITER);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      // Compare up to the delimiter<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      int lpart = (leftDelimiter &lt; 0 ? llength : leftDelimiter - loffset);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      int rpart = (rightDelimiter &lt; 0 ? rlength : rightDelimiter - roffset);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      int result = Bytes.compareTo(left, loffset, lpart, right, roffset, rpart);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      if (result != 0) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        return result;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      } else {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &gt;= 0) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>          return -1;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        } else if (rightDelimiter &lt; 0 &amp;&amp; leftDelimiter &gt;= 0) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>          return 1;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        } else if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &lt; 0) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>          return 0;<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>      // Compare middle bit of the row.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      // Move past delimiter<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      leftDelimiter++;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      rightDelimiter++;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      int leftFarDelimiter = Bytes.searchDelimiterIndexInReverse(left, leftDelimiter, llength<a name="line.353"></a>
+<span class="sourceLineNo">354</span>          - (leftDelimiter - loffset), HConstants.DELIMITER);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      int rightFarDelimiter = Bytes.searchDelimiterIndexInReverse(right, rightDelimiter, rlength<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          - (rightDelimiter - roffset), HConstants.DELIMITER);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      // Now compare middlesection of row.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      lpart = (leftFarDelimiter &lt; 0 ? llength + loffset : leftFarDelimiter) - leftDelimiter;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      rpart = (rightFarDelimiter &lt; 0 ? rlength + roffset : rightFarDelimiter) - rightDelimiter;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      result = Bytes.compareTo(left, leftDelimiter, lpart, right, rightDelimiter, rpart);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      if (result != 0) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        return result;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      } else {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &gt;= 0) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>          return -1;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        } else if (rightDelimiter &lt; 0 &amp;&amp; leftDelimiter &gt;= 0) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>          return 1;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        } else if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &lt; 0) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          return 0;<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>      // Compare last part of row, the rowid.<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      leftFarDelimiter++;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      rightFarDelimiter++;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      result = Bytes.compareTo(left, leftFarDelimiter, llength - (leftFarDelimiter - loffset),<a name="line.375"></a>
+<span class="sourceLineNo">376</span>          right, rightFarDelimiter, rlength - (rightFarDelimiter - roffset));<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      return result;<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 Comparator getSimpleComparator() {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      return this;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    }<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>  @Override<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  public Comparator getSimpleComparator() {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    return new BBKVComparator(this);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>}<a name="line.390"></a>
 
 
 


[19/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
index a99b4a7..119472c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
@@ -109,528 +109,529 @@
 <span class="sourceLineNo">101</span>  protected FileSystem fs;<a name="line.101"></a>
 <span class="sourceLineNo">102</span>  // id of this cluster<a name="line.102"></a>
 <span class="sourceLineNo">103</span>  private UUID clusterId;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // id of the other cluster<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  private UUID peerClusterId;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  // total number of edits we replicated<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private AtomicLong totalReplicatedEdits = new AtomicLong(0);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  // The znode we currently play with<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected String queueId;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  // Maximum number of retries before taking bold actions<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  private int maxRetriesMultiplier;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // Indicates if this particular source is running<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private volatile boolean sourceRunning = false;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  // Metrics for this source<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  private MetricsSource metrics;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  // WARN threshold for the number of queued logs, defaults to 2<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private int logQueueWarnThreshold;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  // ReplicationEndpoint which will handle the actual replication<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private volatile ReplicationEndpoint replicationEndpoint;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  // A filter (or a chain of filters) for the WAL entries.<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  protected WALEntryFilter walEntryFilter;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  // throttler<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private ReplicationThrottler throttler;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private long defaultBandwidth;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  private long currentBandwidth;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private WALFileLengthProvider walFileLengthProvider;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  protected final ConcurrentHashMap&lt;String, ReplicationSourceShipper&gt; workerThreads =<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      new ConcurrentHashMap&lt;&gt;();<a name="line.128"></a>
+<span class="sourceLineNo">104</span>  // total number of edits we replicated<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  private AtomicLong totalReplicatedEdits = new AtomicLong(0);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  // The znode we currently play with<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  protected String queueId;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // Maximum number of retries before taking bold actions<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  private int maxRetriesMultiplier;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  // Indicates if this particular source is running<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  private volatile boolean sourceRunning = false;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  // Metrics for this source<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  private MetricsSource metrics;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  // WARN threshold for the number of queued logs, defaults to 2<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  private int logQueueWarnThreshold;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  // ReplicationEndpoint which will handle the actual replication<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  private volatile ReplicationEndpoint replicationEndpoint;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  // A filter (or a chain of filters) for the WAL entries.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  protected volatile WALEntryFilter walEntryFilter;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  // throttler<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  private ReplicationThrottler throttler;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private long defaultBandwidth;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private long currentBandwidth;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  private WALFileLengthProvider walFileLengthProvider;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  protected final ConcurrentHashMap&lt;String, ReplicationSourceShipper&gt; workerThreads =<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      new ConcurrentHashMap&lt;&gt;();<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  private AtomicLong totalBufferUsed;<a name="line.128"></a>
 <span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private AtomicLong totalBufferUsed;<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public static final String WAIT_ON_ENDPOINT_SECONDS =<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    "hbase.replication.wait.on.endpoint.seconds";<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  public static final int DEFAULT_WAIT_ON_ENDPOINT_SECONDS = 30;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  private int waitOnEndpointSeconds = -1;<a name="line.135"></a>
+<span class="sourceLineNo">130</span>  public static final String WAIT_ON_ENDPOINT_SECONDS =<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    "hbase.replication.wait.on.endpoint.seconds";<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  public static final int DEFAULT_WAIT_ON_ENDPOINT_SECONDS = 30;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  private int waitOnEndpointSeconds = -1;<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private Thread initThread;<a name="line.135"></a>
 <span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  private Thread initThread;<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>   * Instantiation method used by region servers<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   * @param conf configuration to use<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   * @param fs file system to use<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * @param manager replication manager to ping to<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * @param server the server for this region server<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * @param queueId the id of our replication queue<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @param clusterId unique UUID for the cluster<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * @param metrics metrics for replication source<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  @Override<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  public void init(Configuration conf, FileSystem fs, ReplicationSourceManager manager,<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      ReplicationQueueStorage queueStorage, ReplicationPeer replicationPeer, Server server,<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      String queueId, UUID clusterId, WALFileLengthProvider walFileLengthProvider,<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      MetricsSource metrics) throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    this.server = server;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    this.waitOnEndpointSeconds =<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      this.conf.getInt(WAIT_ON_ENDPOINT_SECONDS, DEFAULT_WAIT_ON_ENDPOINT_SECONDS);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    decorateConf();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    this.sleepForRetries =<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        this.conf.getLong("replication.source.sleepforretries", 1000);    // 1 second<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    this.maxRetriesMultiplier =<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        this.conf.getInt("replication.source.maxretriesmultiplier", 300); // 5 minutes @ 1 sec per<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    this.queueSizePerGroup = this.conf.getInt("hbase.regionserver.maxlogs", 32);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    this.queueStorage = queueStorage;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    this.replicationPeer = replicationPeer;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    this.manager = manager;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    this.fs = fs;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    this.metrics = metrics;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    this.clusterId = clusterId;<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>    this.queueId = queueId;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    this.replicationQueueInfo = new ReplicationQueueInfo(queueId);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    // ReplicationQueueInfo parses the peerId out of the znode for us<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    this.peerId = this.replicationQueueInfo.getPeerId();<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    this.logQueueWarnThreshold = this.conf.getInt("replication.source.log.queue.warn", 2);<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>    defaultBandwidth = this.conf.getLong("replication.source.per.peer.node.bandwidth", 0);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    currentBandwidth = getCurrentBandwidth();<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    this.throttler = new ReplicationThrottler((double) currentBandwidth / 10.0);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    this.totalBufferUsed = manager.getTotalBufferUsed();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    this.walFileLengthProvider = walFileLengthProvider;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    LOG.info("queueId=" + queueId + ", ReplicationSource : " + peerId<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        + ", currentBandwidth=" + this.currentBandwidth);<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>  private void decorateConf() {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    String replicationCodec = this.conf.get(HConstants.REPLICATION_CODEC_CONF_KEY);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    if (StringUtils.isNotEmpty(replicationCodec)) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      this.conf.set(HConstants.RPC_CODEC_CONF_KEY, replicationCodec);<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><a name="line.192"></a>
-<span class="sourceLineNo">193</span>  @Override<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public void enqueueLog(Path log) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(log.getName());<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    PriorityBlockingQueue&lt;Path&gt; queue = queues.get(logPrefix);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    if (queue == null) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      queue = new PriorityBlockingQueue&lt;&gt;(queueSizePerGroup, new LogsComparator());<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      queues.put(logPrefix, queue);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      if (this.isSourceActive() &amp;&amp; this.replicationEndpoint != null) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        // new wal group observed after source startup, start a new worker thread to track it<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        // notice: it's possible that log enqueued when this.running is set but worker thread<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        // still not launched, so it's necessary to check workerThreads before start the worker<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        tryStartNewShipper(logPrefix, queue);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    queue.put(log);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    this.metrics.incrSizeOfLogQueue();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // This will log a warning for each new log that gets created above the warn threshold<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    int queueSize = queue.size();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    if (queueSize &gt; this.logQueueWarnThreshold) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      LOG.warn("WAL group " + logPrefix + " queue size: " + queueSize<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          + " exceeds value of replication.source.log.queue.warn: " + logQueueWarnThreshold);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    }<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 void addHFileRefs(TableName tableName, byte[] family, List&lt;Pair&lt;Path, Path&gt;&gt; pairs)<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      throws ReplicationException {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    Map&lt;TableName, List&lt;String&gt;&gt; tableCFMap = replicationPeer.getTableCFs();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    if (tableCFMap != null) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      List&lt;String&gt; tableCfs = tableCFMap.get(tableName);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      if (tableCFMap.containsKey(tableName)<a name="line.223"></a>
-<span class="sourceLineNo">224</span>          &amp;&amp; (tableCfs == null || tableCfs.contains(Bytes.toString(family)))) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        this.queueStorage.addHFileRefs(peerId, pairs);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        metrics.incrSizeOfHFileRefsQueue(pairs.size());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      } else {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        LOG.debug("HFiles will not be replicated belonging to the table " + tableName + " family "<a name="line.228"></a>
-<span class="sourceLineNo">229</span>            + Bytes.toString(family) + " to peer id " + peerId);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    } else {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      // user has explicitly not defined any table cfs for replication, means replicate all the<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // data<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      this.queueStorage.addHFileRefs(peerId, pairs);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      metrics.incrSizeOfHFileRefsQueue(pairs.size());<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 ReplicationEndpoint createReplicationEndpoint()<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    RegionServerCoprocessorHost rsServerHost = null;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    if (server instanceof HRegionServer) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      rsServerHost = ((HRegionServer) server).getRegionServerCoprocessorHost();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    String replicationEndpointImpl = replicationPeer.getPeerConfig().getReplicationEndpointImpl();<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>    ReplicationEndpoint replicationEndpoint;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (replicationEndpointImpl == null) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      // Default to HBase inter-cluster replication endpoint; skip reflection<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      replicationEndpoint = new HBaseInterClusterReplicationEndpoint();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    } else {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      try {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        replicationEndpoint = Class.forName(replicationEndpointImpl)<a name="line.253"></a>
-<span class="sourceLineNo">254</span>            .asSubclass(ReplicationEndpoint.class)<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            .getDeclaredConstructor()<a name="line.255"></a>
-<span class="sourceLineNo">256</span>            .newInstance();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      } catch (NoSuchMethodException | InvocationTargetException e) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        throw new IllegalArgumentException(e);<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>    if (rsServerHost != null) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      ReplicationEndpoint newReplicationEndPoint =<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        rsServerHost.postCreateReplicationEndPoint(replicationEndpoint);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      if (newReplicationEndPoint != null) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        // Override the newly created endpoint from the hook with configured end point<a name="line.265"></a>
-<span class="sourceLineNo">266</span>        replicationEndpoint = newReplicationEndPoint;<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>    return replicationEndpoint;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private void initAndStartReplicationEndpoint(ReplicationEndpoint replicationEndpoint)<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      throws IOException, TimeoutException {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    TableDescriptors tableDescriptors = null;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    if (server instanceof HRegionServer) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      tableDescriptors = ((HRegionServer) server).getTableDescriptors();<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    }<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    replicationEndpoint<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        .init(new ReplicationEndpoint.Context(conf, replicationPeer.getConfiguration(), fs, peerId,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>            clusterId, replicationPeer, metrics, tableDescriptors, server));<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    replicationEndpoint.start();<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    replicationEndpoint.awaitRunning(waitOnEndpointSeconds, TimeUnit.SECONDS);<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>  private void initializeWALEntryFilter() {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    // get the WALEntryFilter from ReplicationEndpoint and add it to default filters<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    ArrayList&lt;WALEntryFilter&gt; filters =<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      Lists.&lt;WALEntryFilter&gt; newArrayList(new SystemTableWALEntryFilter());<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    WALEntryFilter filterFromEndpoint = this.replicationEndpoint.getWALEntryfilter();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    if (filterFromEndpoint != null) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      filters.add(filterFromEndpoint);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    filters.add(new ClusterMarkingEntryFilter(clusterId, peerClusterId, replicationEndpoint));<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    this.walEntryFilter = new ChainWALEntryFilter(filters);<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>  private void tryStartNewShipper(String walGroupId, PriorityBlockingQueue&lt;Path&gt; queue) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    ReplicationSourceShipper worker = createNewShipper(walGroupId, queue);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    ReplicationSourceShipper extant = workerThreads.putIfAbsent(walGroupId, worker);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    if (extant != null) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      LOG.debug("Someone has beat us to start a worker thread for wal group {}", walGroupId);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    } else {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      LOG.debug("Starting up worker for wal group {}", walGroupId);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      ReplicationSourceWALReader walReader =<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        createNewWALReader(walGroupId, queue, worker.getStartPosition());<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      Threads.setDaemonThreadRunning(walReader, Thread.currentThread().getName() +<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        ".replicationSource.wal-reader." + walGroupId + "," + queueId, this::uncaughtException);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      worker.setWALReader(walReader);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      worker.startup(this::uncaughtException);<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><a name="line.312"></a>
-<span class="sourceLineNo">313</span>  protected ReplicationSourceShipper createNewShipper(String walGroupId,<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      PriorityBlockingQueue&lt;Path&gt; queue) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    return new ReplicationSourceShipper(conf, walGroupId, queue, this);<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>  private ReplicationSourceWALReader createNewWALReader(String walGroupId,<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      PriorityBlockingQueue&lt;Path&gt; queue, long startPosition) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    return replicationPeer.getPeerConfig().isSerial()<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      ? new SerialReplicationSourceWALReader(fs, conf, queue, startPosition, walEntryFilter, this)<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      : new ReplicationSourceWALReader(fs, conf, queue, startPosition, walEntryFilter, this);<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>  protected final void uncaughtException(Thread t, Throwable e) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    RSRpcServices.exitIfOOME(e);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    LOG.error("Unexpected exception in " + t.getName() + " currentPath=" + getCurrentPath(), e);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    server.abort("Unexpected exception in " + t.getName(), e);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  @Override<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public ReplicationEndpoint getReplicationEndpoint() {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    return this.replicationEndpoint;<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>  @Override<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  public ReplicationSourceManager getSourceManager() {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    return this.manager;<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>  @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  public void tryThrottle(int batchSize) throws InterruptedException {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    checkBandwidthChangeAndResetThrottler();<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    if (throttler.isEnabled()) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      long sleepTicks = throttler.getNextSleepInterval(batchSize);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      if (sleepTicks &gt; 0) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        if (LOG.isTraceEnabled()) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>          LOG.trace("To sleep " + sleepTicks + "ms for throttling control");<a name="line.348"></a>
-<span class="sourceLineNo">349</span>        }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        Thread.sleep(sleepTicks);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        // reset throttler's cycle start tick when sleep for throttling occurs<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        throttler.resetStartTick();<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      }<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><a name="line.356"></a>
-<span class="sourceLineNo">357</span>  private void checkBandwidthChangeAndResetThrottler() {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    long peerBandwidth = getCurrentBandwidth();<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    if (peerBandwidth != currentBandwidth) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      currentBandwidth = peerBandwidth;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      throttler.setBandwidth((double) currentBandwidth / 10.0);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      LOG.info("ReplicationSource : " + peerId<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          + " bandwidth throttling changed, currentBandWidth=" + currentBandwidth);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    }<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>  private long getCurrentBandwidth() {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    long peerBandwidth = replicationPeer.getPeerBandwidth();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    // user can set peer bandwidth to 0 to use default bandwidth<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return peerBandwidth != 0 ? peerBandwidth : defaultBandwidth;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  }<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>   * Do the sleeping logic<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * @param msg Why we sleep<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   * @param sleepMultiplier by how many times the default sleeping time is augmented<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   * @return True if &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   */<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  protected boolean sleepForRetries(String msg, int sleepMultiplier) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    try {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      if (LOG.isTraceEnabled()) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        LOG.trace(msg + ", sleeping " + sleepForRetries + " times " + sleepMultiplier);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      }<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      Thread.sleep(this.sleepForRetries * sleepMultiplier);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    } catch (InterruptedException e) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      LOG.debug("Interrupted while sleeping between retries");<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      Thread.currentThread().interrupt();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return sleepMultiplier &lt; maxRetriesMultiplier;<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>   * check whether the peer is enabled or not<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   * @return true if the peer is enabled, otherwise false<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   */<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  @Override<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  public boolean isPeerEnabled() {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    return replicationPeer.isPeerEnabled();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  private void initialize() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    int sleepMultiplier = 1;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    while (this.isSourceActive()) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      ReplicationEndpoint replicationEndpoint;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      try {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        replicationEndpoint = createReplicationEndpoint();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      } catch (Exception e) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        LOG.warn("error creating ReplicationEndpoint, retry", e);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        if (sleepForRetries("Error creating ReplicationEndpoint", sleepMultiplier)) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          sleepMultiplier++;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        continue;<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>      try {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        initAndStartReplicationEndpoint(replicationEndpoint);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        this.replicationEndpoint = replicationEndpoint;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        break;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      } catch (Exception e) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        LOG.warn("Error starting ReplicationEndpoint, retry", e);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        replicationEndpoint.stop();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        if (sleepForRetries("Error starting ReplicationEndpoint", sleepMultiplier)) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          sleepMultiplier++;<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>    }<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    if (!this.isSourceActive()) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      return;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>    sleepMultiplier = 1;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    // delay this until we are in an asynchronous thread<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    while (this.isSourceActive() &amp;&amp; this.peerClusterId == null) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      this.peerClusterId = replicationEndpoint.getPeerUUID();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      if (this.isSourceActive() &amp;&amp; this.peerClusterId == null) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        if (sleepForRetries("Cannot contact the peer's zk ensemble", sleepMultiplier)) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>          sleepMultiplier++;<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><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    // In rare case, zookeeper setting may be messed up. That leads to the incorrect<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    // peerClusterId value, which is the same as the source clusterId<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    if (clusterId.equals(peerClusterId) &amp;&amp; !replicationEndpoint.canReplicateToSameCluster()) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      this.terminate("ClusterId " + clusterId + " is replicating to itself: peerClusterId "<a name="line.446"></a>
-<span class="sourceLineNo">447</span>          + peerClusterId + " which is not allowed by ReplicationEndpoint:"<a name="line.447"></a>
-<span class="sourceLineNo">448</span>          + replicationEndpoint.getClass().getName(), null, false);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      this.manager.removeSource(this);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      return;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    }<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    LOG.info("Replicating " + clusterId + " -&gt; " + peerClusterId);<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>    initializeWALEntryFilter();<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    // start workers<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    for (Map.Entry&lt;String, PriorityBlockingQueue&lt;Path&gt;&gt; entry : queues.entrySet()) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      String walGroupId = entry.getKey();<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      PriorityBlockingQueue&lt;Path&gt; queue = entry.getValue();<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      tryStartNewShipper(walGroupId, queue);<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><a name="line.462"></a>
-<span class="sourceLineNo">463</span>  @Override<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  public void startup() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    // mark we are running now<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    this.sourceRunning = true;<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    initThread = new Thread(this::initialize);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    Threads.setDaemonThreadRunning(initThread,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      Thread.currentThread().getName() + ".replicationSource," + this.queueId,<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      this::uncaughtException);<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>  @Override<a name="line.473"></a>
-<span class="sourceLineNo">474</span>  public void terminate(String reason) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    terminate(reason, null);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  @Override<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  public void terminate(String reason, Exception cause) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    terminate(reason, cause, true);<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>  public void terminate(String reason, Exception cause, boolean join) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    if (cause == null) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      LOG.info("Closing source " + this.queueId + " because: " + reason);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    } else {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      LOG.error("Closing source " + this.queueId + " because an error occurred: " + reason,<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        cause);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    this.sourceRunning = false;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    if (initThread != null &amp;&amp; Thread.currentThread() != initThread) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      // This usually won't happen but anyway, let's wait until the initialization thread exits.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      // And notice that we may call terminate directly from the initThread so here we need to<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      // avoid join on ourselves.<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      initThread.interrupt();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      Threads.shutdown(initThread, this.sleepForRetries);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    Collection&lt;ReplicationSourceShipper&gt; workers = workerThreads.values();<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    for (ReplicationSourceShipper worker : workers) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      worker.stopWorker();<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      worker.entryReader.interrupt();<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      worker.interrupt();<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    if (this.replicationEndpoint != null) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      this.replicationEndpoint.stop();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (join) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      for (ReplicationSourceShipper worker : workers) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        Threads.shutdown(worker, this.sleepForRetries);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        LOG.info("ReplicationSourceWorker " + worker.getName() + " terminated");<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      if (this.replicationEndpoint != null) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        try {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          this.replicationEndpoint.awaitTerminated(sleepForRetries * maxRetriesMultiplier,<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            TimeUnit.MILLISECONDS);<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        } catch (TimeoutException te) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>          LOG.warn("Got exception while waiting for endpoint to shutdown for replication source :" +<a name="line.517"></a>
-<span class="sourceLineNo">518</span>            this.queueId, te);<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>    }<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    this.metrics.clear();<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>  @Override<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  public String getQueueId() {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    return this.queueId;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>  @Override<a name="line.530"></a>
-<span class="sourceLineNo">531</span>  public String getPeerId() {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    return this.peerId;<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>  @Override<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  public Path getCurrentPath() {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    // only for testing<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    for (ReplicationSourceShipper worker : workerThreads.values()) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      if (worker.getCurrentPath() != null) {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        return worker.getCurrentPath();<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>    return null;<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>  @Override<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  public boolean isSourceActive() {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    return !this.server.isStopped() &amp;&amp; this.sourceRunning;<a name="line.548"></a>
-<span class="sourceLineNo">549</span>  }<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>   * Comparator used to compare logs together based on their start time<a name="line.552"></a>
-<span class="sourceLineNo">553</span>   */<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  public static class LogsComparator implements Comparator&lt;Path&gt; {<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    @Override<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    public int compare(Path o1, Path o2) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      return Long.compare(getTS(o1), getTS(o2));<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    }<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>     * Split a path to get the start time<a name="line.562"></a>
-<span class="sourceLineNo">563</span>     * For example: 10.20.20.171%3A60020.1277499063250<a name="line.563"></a>
-<span class="sourceLineNo">564</span>     * @param p path to split<a name="line.564"></a>
-<span class="sourceLineNo">565</span>     * @return start time<a name="line.565"></a>
-<span class="sourceLineNo">566</span>     */<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    private static long getTS(Path p) {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      int tsIndex = p.getName().lastIndexOf('.') + 1;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      return Long.parseLong(p.getName().substring(tsIndex));<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>  @Override<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  public String getStats() {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    StringBuilder sb = new StringBuilder();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    sb.append("Total replicated edits: ").append(totalReplicatedEdits)<a name="line.576"></a>
-<span class="sourceLineNo">577</span>        .append(", current progress: \n");<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    for (Map.Entry&lt;String, ReplicationSourceShipper&gt; entry : workerThreads.entrySet()) {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      String walGroupId = entry.getKey();<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      ReplicationSourceShipper worker = entry.getValue();<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      long position = worker.getCurrentPosition();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      Path currentPath = worker.getCurrentPath();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>      sb.append("walGroup [").append(walGroupId).append("]: ");<a name="line.583"></a>
-<span class="sourceLineNo">584</span>      if (currentPath != null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        sb.append("currently replicating from: ").append(currentPath).append(" at position: ")<a name="line.585"></a>
-<span class="sourceLineNo">586</span>            .append(position).append("\n");<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      } else {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        sb.append("no replication ongoing, waiting for new log");<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      }<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    return sb.toString();<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>  @Override<a name="line.594"></a>
-<span class="sourceLineNo">595</span>  public MetricsSource getSourceMetrics() {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    return this.metrics;<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>  @Override<a name="line.599"></a>
-<span class="sourceLineNo">600</span>  public void postShipEdits(List&lt;Entry&gt; entries, int batchSize) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    if (throttler.isEnabled()) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      throttler.addPushSize(batchSize);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    totalReplicatedEdits.addAndGet(entries.size());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    totalBufferUsed.addAndGet(-batchSize);<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>  @Override<a name="line.608"></a>
-<span class="sourceLineNo">609</span>  public WALFileLengthProvider getWALFileLengthProvider() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return walFileLengthProvider;<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>  @Override<a name="line.613"></a>
-<span class="sourceLineNo">614</span>  public ServerName getServerWALsBelongTo() {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    return server.getServerName();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>  Server getServer() {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    return server;<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>  ReplicationQueueStorage getQueueStorage() {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    return queueStorage;<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">137</span>  /**<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   * Instantiation method used by region servers<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * @param conf configuration to use<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   * @param fs file system to use<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * @param manager replication manager to ping to<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   * @param server the server for this region server<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * @param queueId the id of our replication queue<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * @param clusterId unique UUID for the cluster<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * @param metrics metrics for replication source<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 void init(Configuration conf, FileSystem fs, ReplicationSourceManager manager,<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      ReplicationQueueStorage queueStorage, ReplicationPeer replicationPeer, Server server,<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      String queueId, UUID clusterId, WALFileLengthProvider walFileLengthProvider,<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      MetricsSource metrics) throws IOException {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    this.server = server;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    this.waitOnEndpointSeconds =<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      this.conf.getInt(WAIT_ON_ENDPOINT_SECONDS, DEFAULT_WAIT_ON_ENDPOINT_SECONDS);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    decorateConf();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    this.sleepForRetries =<a name="line.157"></a>
+<span class="sourceLineNo">158</span>        this.conf.getLong("replication.source.sleepforretries", 1000);    // 1 second<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    this.maxRetriesMultiplier =<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        this.conf.getInt("replication.source.maxretriesmultiplier", 300); // 5 minutes @ 1 sec per<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    this.queueSizePerGroup = this.conf.getInt("hbase.regionserver.maxlogs", 32);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    this.queueStorage = queueStorage;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    this.replicationPeer = replicationPeer;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    this.manager = manager;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    this.fs = fs;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    this.metrics = metrics;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    this.clusterId = clusterId;<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    this.queueId = queueId;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    this.replicationQueueInfo = new ReplicationQueueInfo(queueId);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // ReplicationQueueInfo parses the peerId out of the znode for us<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    this.peerId = this.replicationQueueInfo.getPeerId();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    this.logQueueWarnThreshold = this.conf.getInt("replication.source.log.queue.warn", 2);<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    defaultBandwidth = this.conf.getLong("replication.source.per.peer.node.bandwidth", 0);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    currentBandwidth = getCurrentBandwidth();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    this.throttler = new ReplicationThrottler((double) currentBandwidth / 10.0);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    this.totalBufferUsed = manager.getTotalBufferUsed();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    this.walFileLengthProvider = walFileLengthProvider;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    LOG.info("queueId=" + queueId + ", ReplicationSource : " + peerId<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        + ", currentBandwidth=" + this.currentBandwidth);<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>  private void decorateConf() {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    String replicationCodec = this.conf.get(HConstants.REPLICATION_CODEC_CONF_KEY);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    if (StringUtils.isNotEmpty(replicationCodec)) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      this.conf.set(HConstants.RPC_CODEC_CONF_KEY, replicationCodec);<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><a name="line.190"></a>
+<span class="sourceLineNo">191</span>  @Override<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  public void enqueueLog(Path log) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(log.getName());<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    PriorityBlockingQueue&lt;Path&gt; queue = queues.get(logPrefix);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    if (queue == null) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      queue = new PriorityBlockingQueue&lt;&gt;(queueSizePerGroup, new LogsComparator());<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      queues.put(logPrefix, queue);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      if (this.isSourceActive() &amp;&amp; this.walEntryFilter != null) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        // new wal group observed after source startup, start a new worker thread to track it<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        // notice: it's possible that log enqueued when this.running is set but worker thread<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        // still not launched, so it's necessary to check workerThreads before start the worker<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        tryStartNewShipper(logPrefix, queue);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    queue.put(log);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    this.metrics.incrSizeOfLogQueue();<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    // This will log a warning for each new log that gets created above the warn threshold<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    int queueSize = queue.size();<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    if (queueSize &gt; this.logQueueWarnThreshold) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      LOG.warn("WAL group " + logPrefix + " queue size: " + queueSize<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          + " exceeds value of replication.source.log.queue.warn: " + logQueueWarnThreshold);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<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 void addHFileRefs(TableName tableName, byte[] family, List&lt;Pair&lt;Path, Path&gt;&gt; pairs)<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      throws ReplicationException {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    Map&lt;TableName, List&lt;String&gt;&gt; tableCFMap = replicationPeer.getTableCFs();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    if (tableCFMap != null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      List&lt;String&gt; tableCfs = tableCFMap.get(tableName);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      if (tableCFMap.containsKey(tableName)<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          &amp;&amp; (tableCfs == null || tableCfs.contains(Bytes.toString(family)))) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>        this.queueStorage.addHFileRefs(peerId, pairs);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        metrics.incrSizeOfHFileRefsQueue(pairs.size());<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      } else {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        LOG.debug("HFiles will not be replicated belonging to the table " + tableName + " family "<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            + Bytes.toString(family) + " to peer id " + peerId);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    } else {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      // user has explicitly not defined any table cfs for replication, means replicate all the<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      // data<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      this.queueStorage.addHFileRefs(peerId, pairs);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      metrics.incrSizeOfHFileRefsQueue(pairs.size());<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>  private ReplicationEndpoint createReplicationEndpoint()<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    RegionServerCoprocessorHost rsServerHost = null;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    if (server instanceof HRegionServer) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      rsServerHost = ((HRegionServer) server).getRegionServerCoprocessorHost();<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    String replicationEndpointImpl = replicationPeer.getPeerConfig().getReplicationEndpointImpl();<a name="line.243"></a>
+<span class="sourceLineNo">244</span><a name="line.244"></a>
+<span class="sourceLineNo">245</span>    ReplicationEndpoint replicationEndpoint;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    if (replicationEndpointImpl == null) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      // Default to HBase inter-cluster replication endpoint; skip reflection<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      replicationEndpoint = new HBaseInterClusterReplicationEndpoint();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    } else {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      try {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        replicationEndpoint = Class.forName(replicationEndpointImpl)<a name="line.251"></a>
+<span class="sourceLineNo">252</span>            .asSubclass(ReplicationEndpoint.class)<a name="line.252"></a>
+<span class="sourceLineNo">253</span>            .getDeclaredConstructor()<a name="line.253"></a>
+<span class="sourceLineNo">254</span>            .newInstance();<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      } catch (NoSuchMethodException | InvocationTargetException e) {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        throw new IllegalArgumentException(e);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    if (rsServerHost != null) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      ReplicationEndpoint newReplicationEndPoint =<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        rsServerHost.postCreateReplicationEndPoint(replicationEndpoint);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      if (newReplicationEndPoint != null) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>        // Override the newly created endpoint from the hook with configured end point<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        replicationEndpoint = newReplicationEndPoint;<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 replicationEndpoint;<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>  private void initAndStartReplicationEndpoint(ReplicationEndpoint replicationEndpoint)<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      throws IOException, TimeoutException {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    TableDescriptors tableDescriptors = null;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    if (server instanceof HRegionServer) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      tableDescriptors = ((HRegionServer) server).getTableDescriptors();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    replicationEndpoint<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        .init(new ReplicationEndpoint.Context(conf, replicationPeer.getConfiguration(), fs, peerId,<a name="line.277"></a>
+<span class="sourceLineNo">278</span>            clusterId, replicationPeer, metrics, tableDescriptors, server));<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    replicationEndpoint.start();<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    replicationEndpoint.awaitRunning(waitOnEndpointSeconds, TimeUnit.SECONDS);<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>  private void initializeWALEntryFilter(UUID peerClusterId) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    // get the WALEntryFilter from ReplicationEndpoint and add it to default filters<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    ArrayList&lt;WALEntryFilter&gt; filters =<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      Lists.&lt;WALEntryFilter&gt; newArrayList(new SystemTableWALEntryFilter());<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    WALEntryFilter filterFromEndpoint = this.replicationEndpoint.getWALEntryfilter();<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    if (filterFromEndpoint != null) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      filters.add(filterFromEndpoint);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    filters.add(new ClusterMarkingEntryFilter(clusterId, peerClusterId, replicationEndpoint));<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    this.walEntryFilter = new ChainWALEntryFilter(filters);<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>  private void tryStartNewShipper(String walGroupId, PriorityBlockingQueue&lt;Path&gt; queue) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    ReplicationSourceShipper worker = createNewShipper(walGroupId, queue);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    ReplicationSourceShipper extant = workerThreads.putIfAbsent(walGroupId, worker);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    if (extant != null) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      LOG.debug("Someone has beat us to start a worker thread for wal group {}", walGroupId);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    } else {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      LOG.debug("Starting up worker for wal group {}", walGroupId);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      ReplicationSourceWALReader walReader =<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        createNewWALReader(walGroupId, queue, worker.getStartPosition());<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      Threads.setDaemonThreadRunning(walReader, Thread.currentThread().getName() +<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        ".replicationSource.wal-reader." + walGroupId + "," + queueId, this::uncaughtException);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      worker.setWALReader(walReader);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      worker.startup(this::uncaughtException);<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>  protected ReplicationSourceShipper createNewShipper(String walGroupId,<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      PriorityBlockingQueue&lt;Path&gt; queue) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    return new ReplicationSourceShipper(conf, walGroupId, queue, this);<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>  private ReplicationSourceWALReader createNewWALReader(String walGroupId,<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      PriorityBlockingQueue&lt;Path&gt; queue, long startPosition) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    return replicationPeer.getPeerConfig().isSerial()<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      ? new SerialReplicationSourceWALReader(fs, conf, queue, startPosition, walEntryFilter, this)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      : new ReplicationSourceWALReader(fs, conf, queue, startPosition, walEntryFilter, 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>  protected final void uncaughtException(Thread t, Throwable e) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    RSRpcServices.exitIfOOME(e);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    LOG.error("Unexpected exception in " + t.getName() + " currentPath=" + getCurrentPath(), e);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    server.abort("Unexpected exception in " + t.getName(), e);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  @Override<a name="line.329"></a>
+<span class="sourceLineNo">330</span>  public ReplicationEndpoint getReplicationEndpoint() {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    return this.replicationEndpoint;<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 ReplicationSourceManager getSourceManager() {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    return this.manager;<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 void tryThrottle(int batchSize) throws InterruptedException {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    checkBandwidthChangeAndResetThrottler();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    if (throttler.isEnabled()) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      long sleepTicks = throttler.getNextSleepInterval(batchSize);<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      if (sleepTicks &gt; 0) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        if (LOG.isTraceEnabled()) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>          LOG.trace("To sleep " + sleepTicks + "ms for throttling control");<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        }<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        Thread.sleep(sleepTicks);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        // reset throttler's cycle start tick when sleep for throttling occurs<a name="line.349"></a>
+<span class="sourceLineNo">350</span>        throttler.resetStartTick();<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>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  private void checkBandwidthChangeAndResetThrottler() {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    long peerBandwidth = getCurrentBandwidth();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    if (peerBandwidth != currentBandwidth) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      currentBandwidth = peerBandwidth;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      throttler.setBandwidth((double) currentBandwidth / 10.0);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      LOG.info("ReplicationSource : " + peerId<a name="line.360"></a>
+<span class="sourceLineNo">361</span>          + " bandwidth throttling changed, currentBandWidth=" + currentBandwidth);<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><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  private long getCurrentBandwidth() {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    long peerBandwidth = replicationPeer.getPeerBandwidth();<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    // user can set peer bandwidth to 0 to use default bandwidth<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    return peerBandwidth != 0 ? peerBandwidth : defaultBandwidth;<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>   * Do the sleeping logic<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * @param msg Why we sleep<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * @param sleepMultiplier by how many times the default sleeping time is augmented<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * @return True if &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  protected boolean sleepForRetries(String msg, int sleepMultiplier) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    try {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      if (LOG.isTraceEnabled()) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        LOG.trace(msg + ", sleeping " + sleepForRetries + " times " + sleepMultiplier);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      Thread.sleep(this.sleepForRetries * sleepMultiplier);<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    } catch (InterruptedException e) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      LOG.debug("Interrupted while sleeping between retries");<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      Thread.currentThread().interrupt();<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return sleepMultiplier &lt; maxRetriesMultiplier;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * check whether the peer is enabled or not<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @return true if the peer is enabled, otherwise false<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 boolean isPeerEnabled() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    return replicationPeer.isPeerEnabled();<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  }<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>  private void initialize() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    int sleepMultiplier = 1;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    while (this.isSourceActive()) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      ReplicationEndpoint replicationEndpoint;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      try {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        replicationEndpoint = createReplicationEndpoint();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      } catch (Exception e) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        LOG.warn("error creating ReplicationEndpoint, retry", e);<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        if (sleepForRetries("Error creating ReplicationEndpoint", sleepMultiplier)) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          sleepMultiplier++;<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        }<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        continue;<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>      try {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        initAndStartReplicationEndpoint(replicationEndpoint);<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        this.replicationEndpoint = replicationEndpoint;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        break;<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      } catch (Exception e) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        LOG.warn("Error starting ReplicationEndpoint, retry", e);<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        replicationEndpoint.stop();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        if (sleepForRetries("Error starting ReplicationEndpoint", sleepMultiplier)) {<a name="line.420"></a>
+<span class="sourceLineNo">421</span>          sleepMultiplier++;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        }<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      }<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    }<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span>    if (!this.isSourceActive()) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      return;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>    sleepMultiplier = 1;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    UUID peerClusterId;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    // delay this until we are in an asynchronous thread<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    for (;;) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      peerClusterId = replicationEndpoint.getPeerUUID();<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      if (this.isSourceActive() &amp;&amp; peerClusterId == null) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>        if (sleepForRetries("Cannot contact the peer's zk ensemble", sleepMultiplier)) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>          sleepMultiplier++;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>        }<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      } else {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        break;<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>    // In rare case, zookeeper setting may be messed up. That leads to the incorrect<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    // peerClusterId value, which is the same as the source clusterId<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    if (clusterId.equals(peerClusterId) &amp;&amp; !replicationEndpoint.canReplicateToSameCluster()) {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      this.terminate("ClusterId " + clusterId + " is replicating to itself: peerClusterId "<a name="line.447"></a>
+<span class="sourceLineNo">448</span>          + peerClusterId + " which is not allowed by ReplicationEndpoint:"<a name="line.448"></a>
+<span class="sourceLineNo">449</span>          + replicationEndpoint.getClass().getName(), null, false);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      this.manager.removeSource(this);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      return;<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    }<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    LOG.info("Replicating " + clusterId + " -&gt; " + peerClusterId);<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>    initializeWALEntryFilter(peerClusterId);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    // start workers<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    for (Map.Entry&lt;String, PriorityBlockingQueue&lt;Path&gt;&gt; entry : queues.entrySet()) {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>      String walGroupId = entry.getKey();<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      PriorityBlockingQueue&lt;Path&gt; queue = entry.getValue();<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      tryStartNewShipper(walGroupId, queue);<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.4

<TRUNCATED>

[10/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html
index 54b1f96..ed95cbf 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html
@@ -31,922 +31,906 @@
 <span class="sourceLineNo">023</span>import java.io.ByteArrayInputStream;<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.ArrayList;<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.Collections;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.HashSet;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.LinkedList;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.List;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.Map;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.NavigableSet;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Set;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.SortedSet;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.TreeSet;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.Cell;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.Coprocessor;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.HConstants;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.MetaTableAccessor.DefaultVisitorBase;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.ServerName;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.client.Get;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.client.Put;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.client.Result;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.Table;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.constraint.ConstraintException;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.master.ServerListener;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.net.Address;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.protobuf.ProtobufMagic;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.protobuf.generated.MultiRowMutationProtos;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupProtos;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.quotas.QuotaTableUtil;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.security.access.AccessControlLists;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.zookeeper.KeeperException;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.slf4j.Logger;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.slf4j.LoggerFactory;<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<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> * This is an implementation of {@link RSGroupInfoManager} which makes<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * use of an HBase table as the persistence store for the group information.<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * It also makes use of zookeeper to store group information needed<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * for bootstrapping during offline mode.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> *<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * &lt;h2&gt;Concurrency&lt;/h2&gt;<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * RSGroup state is kept locally in Maps. There is a rsgroup name to cached<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * RSGroupInfo Map at {@link #rsGroupMap} and a Map of tables to the name of the<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * rsgroup they belong too (in {@link #tableMap}). These Maps are persisted to the<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * hbase:rsgroup table (and cached in zk) on each modification.<a name="line.104"></a>
-<span class="sourceLineNo">105</span> *<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * &lt;p&gt;Mutations on state are synchronized but reads can continue without having<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * to wait on an instance monitor, mutations do wholesale replace of the Maps on<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * update -- Copy-On-Write; the local Maps of state are read-only, just-in-case<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * (see flushConfig).<a name="line.109"></a>
-<span class="sourceLineNo">110</span> *<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * &lt;p&gt;Reads must not block else there is a danger we'll deadlock.<a name="line.111"></a>
-<span class="sourceLineNo">112</span> *<a name="line.112"></a>
-<span class="sourceLineNo">113</span> * &lt;p&gt;Clients of this class, the {@link RSGroupAdminEndpoint} for example, want to query and<a name="line.113"></a>
-<span class="sourceLineNo">114</span> * then act on the results of the query modifying cache in zookeeper without another thread<a name="line.114"></a>
-<span class="sourceLineNo">115</span> * making intermediate modifications. These clients synchronize on the 'this' instance so<a name="line.115"></a>
-<span class="sourceLineNo">116</span> * no other has access concurrently. Reads must be able to continue concurrently.<a name="line.116"></a>
-<span class="sourceLineNo">117</span> */<a name="line.117"></a>
-<span class="sourceLineNo">118</span>@InterfaceAudience.Private<a name="line.118"></a>
-<span class="sourceLineNo">119</span>final class RSGroupInfoManagerImpl implements RSGroupInfoManager {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  private static final Logger LOG = LoggerFactory.getLogger(RSGroupInfoManagerImpl.class);<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  /** Table descriptor for &lt;code&gt;hbase:rsgroup&lt;/code&gt; catalog table */<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private final static HTableDescriptor RSGROUP_TABLE_DESC;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  static {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    RSGROUP_TABLE_DESC = new HTableDescriptor(RSGROUP_TABLE_NAME);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    RSGROUP_TABLE_DESC.addFamily(new HColumnDescriptor(META_FAMILY_BYTES));<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    RSGROUP_TABLE_DESC.setRegionSplitPolicyClassName(DisabledRegionSplitPolicy.class.getName());<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    try {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      RSGROUP_TABLE_DESC.addCoprocessor(<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        MultiRowMutationEndpoint.class.getName(),<a name="line.130"></a>
-<span class="sourceLineNo">131</span>          null, Coprocessor.PRIORITY_SYSTEM, null);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    } catch (IOException ex) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      throw new RuntimeException(ex);<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><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  // There two Maps are immutable and wholesale replaced on each modification<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  // so are safe to access concurrently. See class comment.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private volatile Map&lt;String, RSGroupInfo&gt; rsGroupMap = Collections.emptyMap();<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  private volatile Map&lt;TableName, String&gt; tableMap = Collections.emptyMap();<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private final MasterServices masterServices;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  private Table rsGroupTable;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final ClusterConnection conn;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final ZKWatcher watcher;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  private final RSGroupStartupWorker rsGroupStartupWorker = new RSGroupStartupWorker();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  // contains list of groups that were last flushed to persistent store<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private Set&lt;String&gt; prevRSGroups = new HashSet&lt;&gt;();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private final ServerEventsListenerThread serverEventsListenerThread =<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      new ServerEventsListenerThread();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private FailedOpenUpdaterThread failedOpenUpdaterThread;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  private RSGroupInfoManagerImpl(MasterServices masterServices) throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    this.masterServices = masterServices;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    this.watcher = masterServices.getZooKeeper();<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    this.conn = masterServices.getClusterConnection();<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>  private synchronized void init() throws IOException{<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    refresh();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    serverEventsListenerThread.start();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    masterServices.getServerManager().registerListener(serverEventsListenerThread);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    failedOpenUpdaterThread = new FailedOpenUpdaterThread(masterServices.getConfiguration());<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    failedOpenUpdaterThread.start();<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    masterServices.getServerManager().registerListener(failedOpenUpdaterThread);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  static RSGroupInfoManager getInstance(MasterServices master) throws IOException {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    RSGroupInfoManagerImpl instance = new RSGroupInfoManagerImpl(master);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    instance.init();<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    return instance;<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>  public void start(){<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    // create system table of rsgroup<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    rsGroupStartupWorker.start();<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 synchronized void addRSGroup(RSGroupInfo rsGroupInfo) throws IOException {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    checkGroupName(rsGroupInfo.getName());<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    if (rsGroupMap.get(rsGroupInfo.getName()) != null ||<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        rsGroupInfo.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      throw new DoNotRetryIOException("Group already exists: "+ rsGroupInfo.getName());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    Map&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    newGroupMap.put(rsGroupInfo.getName(), rsGroupInfo);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    flushConfig(newGroupMap);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>  private RSGroupInfo getRSGroupInfo(final String groupName) throws DoNotRetryIOException {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    RSGroupInfo rsGroupInfo = getRSGroup(groupName);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    if (rsGroupInfo == null) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      throw new DoNotRetryIOException("RSGroup " + groupName + " does not exist");<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    return rsGroupInfo;<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 synchronized Set&lt;Address&gt; moveServers(Set&lt;Address&gt; servers, String srcGroup,<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      String dstGroup) throws IOException {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    RSGroupInfo src = getRSGroupInfo(srcGroup);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    RSGroupInfo dst = getRSGroupInfo(dstGroup);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    // If destination is 'default' rsgroup, only add servers that are online. If not online, drop<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    // it. If not 'default' group, add server to 'dst' rsgroup EVEN IF IT IS NOT online (could be a<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    // rsgroup of dead servers that are to come back later).<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    Set&lt;Address&gt; onlineServers = dst.getName().equals(RSGroupInfo.DEFAULT_GROUP)?<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        Utility.getOnlineServers(this.masterServices): null;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    for (Address el: servers) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      src.removeServer(el);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (onlineServers != null) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        if (!onlineServers.contains(el)) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          if (LOG.isDebugEnabled()) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>            LOG.debug("Dropping " + el + " during move-to-default rsgroup because not online");<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          continue;<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>      dst.addServer(el);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    newGroupMap.put(src.getName(), src);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    newGroupMap.put(dst.getName(), dst);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    flushConfig(newGroupMap);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    return dst.getServers();<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 RSGroupInfo getRSGroupOfServer(Address serverHostPort) throws IOException {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    for (RSGroupInfo info: rsGroupMap.values()) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      if (info.containsServer(serverHostPort)) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        return info;<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>    return null;<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>  @Override<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  public RSGroupInfo getRSGroup(String groupName) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    return rsGroupMap.get(groupName);<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>  @Override<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  public String getRSGroupOfTable(TableName tableName) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    return tableMap.get(tableName);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>  @Override<a name="line.248"></a>
-<span class="sourceLineNo">249</span>  public synchronized void moveTables(Set&lt;TableName&gt; tableNames, String groupName)<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      throws IOException {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    if (groupName != null &amp;&amp; !rsGroupMap.containsKey(groupName)) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      throw new DoNotRetryIOException("Group "+groupName+" does not exist or is a special group");<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>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    for(TableName tableName: tableNames) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      if (tableMap.containsKey(tableName)) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        RSGroupInfo src = new RSGroupInfo(newGroupMap.get(tableMap.get(tableName)));<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        src.removeTable(tableName);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        newGroupMap.put(src.getName(), src);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      if(groupName != null) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        RSGroupInfo dst = new RSGroupInfo(newGroupMap.get(groupName));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        dst.addTable(tableName);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        newGroupMap.put(dst.getName(), dst);<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>    flushConfig(newGroupMap);<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>  @Override<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  public synchronized void removeRSGroup(String groupName) throws IOException {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (!rsGroupMap.containsKey(groupName) || groupName.equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      throw new DoNotRetryIOException("Group " + groupName + " does not exist or is a reserved "<a name="line.274"></a>
-<span class="sourceLineNo">275</span>          + "group");<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    newGroupMap.remove(groupName);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    flushConfig(newGroupMap);<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>  @Override<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public List&lt;RSGroupInfo&gt; listRSGroups() {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    return Lists.newLinkedList(rsGroupMap.values());<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 boolean isOnline() {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    return rsGroupStartupWorker.isOnline();<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 void moveServersAndTables(Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables,<a name="line.293"></a>
-<span class="sourceLineNo">294</span>                                   String srcGroup, String dstGroup) throws IOException {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    //get server's group<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    RSGroupInfo srcGroupInfo = getRSGroupInfo(srcGroup);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    RSGroupInfo dstGroupInfo = getRSGroupInfo(dstGroup);<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>    //move servers<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    for (Address el: servers) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      srcGroupInfo.removeServer(el);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      dstGroupInfo.addServer(el);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    //move tables<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    for(TableName tableName: tables) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      srcGroupInfo.removeTable(tableName);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      dstGroupInfo.addTable(tableName);<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>    //flush changed groupinfo<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    newGroupMap.put(srcGroupInfo.getName(), srcGroupInfo);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    newGroupMap.put(dstGroupInfo.getName(), dstGroupInfo);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    flushConfig(newGroupMap);<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 synchronized void removeServers(Set&lt;Address&gt; servers) throws IOException {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    Map&lt;String, RSGroupInfo&gt; rsGroupInfos = new HashMap&lt;String, RSGroupInfo&gt;();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    for (Address el: servers) {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      RSGroupInfo rsGroupInfo = getRSGroupOfServer(el);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      if (rsGroupInfo != null) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>        RSGroupInfo newRsGroupInfo = rsGroupInfos.get(rsGroupInfo.getName());<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        if (newRsGroupInfo == null) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>          rsGroupInfo.removeServer(el);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>          rsGroupInfos.put(rsGroupInfo.getName(), rsGroupInfo);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        } else {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>          newRsGroupInfo.removeServer(el);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>          rsGroupInfos.put(newRsGroupInfo.getName(), newRsGroupInfo);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      }else {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        LOG.warn("Server " + el + " does not belong to any rsgroup.");<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>    if (rsGroupInfos.size() &gt; 0) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      Map&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      newGroupMap.putAll(rsGroupInfos);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      flushConfig(newGroupMap);<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><a name="line.342"></a>
-<span class="sourceLineNo">343</span>  List&lt;RSGroupInfo&gt; retrieveGroupListFromGroupTable() throws IOException {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    List&lt;RSGroupInfo&gt; rsGroupInfoList = Lists.newArrayList();<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    for (Result result : rsGroupTable.getScanner(new Scan())) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      RSGroupProtos.RSGroupInfo proto = RSGroupProtos.RSGroupInfo.parseFrom(<a name="line.346"></a>
-<span class="sourceLineNo">347</span>              result.getValue(META_FAMILY_BYTES, META_QUALIFIER_BYTES));<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      rsGroupInfoList.add(RSGroupProtobufUtil.toGroupInfo(proto));<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    return rsGroupInfoList;<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>  List&lt;RSGroupInfo&gt; retrieveGroupListFromZookeeper() throws IOException {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    List&lt;RSGroupInfo&gt; RSGroupInfoList = Lists.newArrayList();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    //Overwrite any info stored by table, this takes precedence<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    try {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      if(ZKUtil.checkExists(watcher, groupBasePath) != -1) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        List&lt;String&gt; children = ZKUtil.listChildrenAndWatchForNewChildren(watcher, groupBasePath);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (children == null) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          return RSGroupInfoList;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        for(String znode: children) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          byte[] data = ZKUtil.getData(watcher, ZNodePaths.joinZNode(groupBasePath, znode));<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          if(data.length &gt; 0) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>            ProtobufUtil.expectPBMagicPrefix(data);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            ByteArrayInputStream bis = new ByteArrayInputStream(<a name="line.367"></a>
-<span class="sourceLineNo">368</span>                data, ProtobufUtil.lengthOfPBMagic(), data.length);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>            RSGroupInfoList.add(RSGroupProtobufUtil.toGroupInfo(<a name="line.369"></a>
-<span class="sourceLineNo">370</span>                RSGroupProtos.RSGroupInfo.parseFrom(bis)));<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        }<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        LOG.debug("Read ZK GroupInfo count:" + RSGroupInfoList.size());<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      }<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    } catch (KeeperException|DeserializationException|InterruptedException e) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      throw new IOException("Failed to read rsGroupZNode",e);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    return RSGroupInfoList;<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>  @Override<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  public void refresh() throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    refresh(false);<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>   * Read rsgroup info from the source of truth, the hbase:rsgroup table.<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * Update zk cache. Called on startup of the manager.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   */<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  private synchronized void refresh(boolean forceOnline) throws IOException {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    List&lt;RSGroupInfo&gt; groupList = new LinkedList&lt;&gt;();<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>    // Overwrite anything read from zk, group table is source of truth<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    // if online read from GROUP table<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    if (forceOnline || isOnline()) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      LOG.debug("Refreshing in Online mode.");<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      if (rsGroupTable == null) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        rsGroupTable = conn.getTable(RSGROUP_TABLE_NAME);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      groupList.addAll(retrieveGroupListFromGroupTable());<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      LOG.debug("Refreshing in Offline mode.");<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      groupList.addAll(retrieveGroupListFromZookeeper());<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>    // refresh default group, prune<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    NavigableSet&lt;TableName&gt; orphanTables = new TreeSet&lt;&gt;();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    for(String entry: masterServices.getTableDescriptors().getAll().keySet()) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      orphanTables.add(TableName.valueOf(entry));<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>
-<span class="sourceLineNo">412</span>    List&lt;TableName&gt; specialTables =<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        new ArrayList&lt;TableName&gt;(Arrays.asList(AccessControlLists.ACL_TABLE_NAME,<a name="line.413"></a>
-<span class="sourceLineNo">414</span>          TableName.META_TABLE_NAME, TableName.NAMESPACE_TABLE_NAME, RSGROUP_TABLE_NAME));<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    // if quota is enabled, add corresponding system table to special tables list<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    if (QuotaUtil.isQuotaEnabled(conn.getConfiguration())) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      specialTables.add(QuotaTableUtil.QUOTA_TABLE_NAME);<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>    for (TableName table : specialTables) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      orphanTables.add(table);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    for (RSGroupInfo group: groupList) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      if(!group.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        orphanTables.removeAll(group.getTables());<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><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // This is added to the last of the list so it overwrites the 'default' rsgroup loaded<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    // from region group table or zk<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    groupList.add(new RSGroupInfo(RSGroupInfo.DEFAULT_GROUP, getDefaultServers(),<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        orphanTables));<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // populate the data<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    HashMap&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    HashMap&lt;TableName, String&gt; newTableMap = Maps.newHashMap();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    for (RSGroupInfo group : groupList) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      newGroupMap.put(group.getName(), group);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      for(TableName table: group.getTables()) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        newTableMap.put(table, group.getName());<a name="line.440"></a>
+<span class="sourceLineNo">026</span>import java.util.Collections;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.HashMap;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.HashSet;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.LinkedList;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.List;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.Map;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.NavigableSet;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.Set;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.SortedSet;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.TreeSet;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.Cell;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.Coprocessor;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HConstants;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.MetaTableAccessor.DefaultVisitorBase;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ServerName;<a name="line.48"></a>
+<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.client.ClusterConnection;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.Get;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.client.Put;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.client.Result;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.Table;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.constraint.ConstraintException;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.master.ServerListener;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.net.Address;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.protobuf.ProtobufMagic;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.protobuf.generated.MultiRowMutationProtos;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupProtos;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.zookeeper.KeeperException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.slf4j.Logger;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.slf4j.LoggerFactory;<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>/**<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * This is an implementation of {@link RSGroupInfoManager} which makes<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * use of an HBase table as the persistence store for the group information.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * It also makes use of zookeeper to store group information needed<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * for bootstrapping during offline mode.<a name="line.94"></a>
+<span class="sourceLineNo">095</span> *<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * &lt;h2&gt;Concurrency&lt;/h2&gt;<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * RSGroup state is kept locally in Maps. There is a rsgroup name to cached<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * RSGroupInfo Map at {@link #rsGroupMap} and a Map of tables to the name of the<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * rsgroup they belong too (in {@link #tableMap}). These Maps are persisted to the<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * hbase:rsgroup table (and cached in zk) on each modification.<a name="line.100"></a>
+<span class="sourceLineNo">101</span> *<a name="line.101"></a>
+<span class="sourceLineNo">102</span> * &lt;p&gt;Mutations on state are synchronized but reads can continue without having<a name="line.102"></a>
+<span class="sourceLineNo">103</span> * to wait on an instance monitor, mutations do wholesale replace of the Maps on<a name="line.103"></a>
+<span class="sourceLineNo">104</span> * update -- Copy-On-Write; the local Maps of state are read-only, just-in-case<a name="line.104"></a>
+<span class="sourceLineNo">105</span> * (see flushConfig).<a name="line.105"></a>
+<span class="sourceLineNo">106</span> *<a name="line.106"></a>
+<span class="sourceLineNo">107</span> * &lt;p&gt;Reads must not block else there is a danger we'll deadlock.<a name="line.107"></a>
+<span class="sourceLineNo">108</span> *<a name="line.108"></a>
+<span class="sourceLineNo">109</span> * &lt;p&gt;Clients of this class, the {@link RSGroupAdminEndpoint} for example, want to query and<a name="line.109"></a>
+<span class="sourceLineNo">110</span> * then act on the results of the query modifying cache in zookeeper without another thread<a name="line.110"></a>
+<span class="sourceLineNo">111</span> * making intermediate modifications. These clients synchronize on the 'this' instance so<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * no other has access concurrently. Reads must be able to continue concurrently.<a name="line.112"></a>
+<span class="sourceLineNo">113</span> */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>@InterfaceAudience.Private<a name="line.114"></a>
+<span class="sourceLineNo">115</span>final class RSGroupInfoManagerImpl implements RSGroupInfoManager {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private static final Logger LOG = LoggerFactory.getLogger(RSGroupInfoManagerImpl.class);<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  /** Table descriptor for &lt;code&gt;hbase:rsgroup&lt;/code&gt; catalog table */<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  private final static HTableDescriptor RSGROUP_TABLE_DESC;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  static {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    RSGROUP_TABLE_DESC = new HTableDescriptor(RSGROUP_TABLE_NAME);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    RSGROUP_TABLE_DESC.addFamily(new HColumnDescriptor(META_FAMILY_BYTES));<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    RSGROUP_TABLE_DESC.setRegionSplitPolicyClassName(DisabledRegionSplitPolicy.class.getName());<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    try {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      RSGROUP_TABLE_DESC.addCoprocessor(<a name="line.125"></a>
+<span class="sourceLineNo">126</span>        MultiRowMutationEndpoint.class.getName(),<a name="line.126"></a>
+<span class="sourceLineNo">127</span>          null, Coprocessor.PRIORITY_SYSTEM, null);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    } catch (IOException ex) {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      throw new RuntimeException(ex);<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>  // There two Maps are immutable and wholesale replaced on each modification<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  // so are safe to access concurrently. See class comment.<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private volatile Map&lt;String, RSGroupInfo&gt; rsGroupMap = Collections.emptyMap();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  private volatile Map&lt;TableName, String&gt; tableMap = Collections.emptyMap();<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  private final MasterServices masterServices;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  private Table rsGroupTable;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private final ClusterConnection conn;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  private final ZKWatcher watcher;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  private final RSGroupStartupWorker rsGroupStartupWorker = new RSGroupStartupWorker();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  // contains list of groups that were last flushed to persistent store<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  private Set&lt;String&gt; prevRSGroups = new HashSet&lt;&gt;();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private final ServerEventsListenerThread serverEventsListenerThread =<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      new ServerEventsListenerThread();<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  private FailedOpenUpdaterThread failedOpenUpdaterThread;<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private RSGroupInfoManagerImpl(MasterServices masterServices) throws IOException {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    this.masterServices = masterServices;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    this.watcher = masterServices.getZooKeeper();<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    this.conn = masterServices.getClusterConnection();<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>  private synchronized void init() throws IOException{<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    refresh();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    serverEventsListenerThread.start();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    masterServices.getServerManager().registerListener(serverEventsListenerThread);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    failedOpenUpdaterThread = new FailedOpenUpdaterThread(masterServices.getConfiguration());<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    failedOpenUpdaterThread.start();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    masterServices.getServerManager().registerListener(failedOpenUpdaterThread);<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>  static RSGroupInfoManager getInstance(MasterServices master) throws IOException {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    RSGroupInfoManagerImpl instance = new RSGroupInfoManagerImpl(master);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    instance.init();<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    return instance;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  public void start(){<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // create system table of rsgroup<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    rsGroupStartupWorker.start();<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 synchronized void addRSGroup(RSGroupInfo rsGroupInfo) throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    checkGroupName(rsGroupInfo.getName());<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    if (rsGroupMap.get(rsGroupInfo.getName()) != null ||<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        rsGroupInfo.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      throw new DoNotRetryIOException("Group already exists: "+ rsGroupInfo.getName());<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    Map&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    newGroupMap.put(rsGroupInfo.getName(), rsGroupInfo);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    flushConfig(newGroupMap);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private RSGroupInfo getRSGroupInfo(final String groupName) throws DoNotRetryIOException {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    RSGroupInfo rsGroupInfo = getRSGroup(groupName);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    if (rsGroupInfo == null) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      throw new DoNotRetryIOException("RSGroup " + groupName + " does not exist");<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    return rsGroupInfo;<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>  @Override<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  public synchronized Set&lt;Address&gt; moveServers(Set&lt;Address&gt; servers, String srcGroup,<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      String dstGroup) throws IOException {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    RSGroupInfo src = getRSGroupInfo(srcGroup);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    RSGroupInfo dst = getRSGroupInfo(dstGroup);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    // If destination is 'default' rsgroup, only add servers that are online. If not online, drop<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // it. If not 'default' group, add server to 'dst' rsgroup EVEN IF IT IS NOT online (could be a<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // rsgroup of dead servers that are to come back later).<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    Set&lt;Address&gt; onlineServers = dst.getName().equals(RSGroupInfo.DEFAULT_GROUP)?<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        Utility.getOnlineServers(this.masterServices): null;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    for (Address el: servers) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      src.removeServer(el);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      if (onlineServers != null) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        if (!onlineServers.contains(el)) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>          if (LOG.isDebugEnabled()) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>            LOG.debug("Dropping " + el + " during move-to-default rsgroup because not online");<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          }<a name="line.211"></a>
+<span class="sourceLineNo">212</span>          continue;<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>      dst.addServer(el);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    newGroupMap.put(src.getName(), src);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    newGroupMap.put(dst.getName(), dst);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    flushConfig(newGroupMap);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    return dst.getServers();<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 RSGroupInfo getRSGroupOfServer(Address serverHostPort) throws IOException {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    for (RSGroupInfo info: rsGroupMap.values()) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      if (info.containsServer(serverHostPort)) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        return info;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      }<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    return null;<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>  public RSGroupInfo getRSGroup(String groupName) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return rsGroupMap.get(groupName);<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>  @Override<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  public String getRSGroupOfTable(TableName tableName) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    return tableMap.get(tableName);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>  @Override<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  public synchronized void moveTables(Set&lt;TableName&gt; tableNames, String groupName)<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      throws IOException {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    if (groupName != null &amp;&amp; !rsGroupMap.containsKey(groupName)) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      throw new DoNotRetryIOException("Group "+groupName+" does not exist");<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>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    for(TableName tableName: tableNames) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      if (tableMap.containsKey(tableName)) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        RSGroupInfo src = new RSGroupInfo(newGroupMap.get(tableMap.get(tableName)));<a name="line.254"></a>
+<span class="sourceLineNo">255</span>        src.removeTable(tableName);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        newGroupMap.put(src.getName(), src);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      if(groupName != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        RSGroupInfo dst = new RSGroupInfo(newGroupMap.get(groupName));<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        dst.addTable(tableName);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        newGroupMap.put(dst.getName(), dst);<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>    flushConfig(newGroupMap);<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>  @Override<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  public synchronized void removeRSGroup(String groupName) throws IOException {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    if (!rsGroupMap.containsKey(groupName) || groupName.equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      throw new DoNotRetryIOException("Group " + groupName + " does not exist or is a reserved "<a name="line.270"></a>
+<span class="sourceLineNo">271</span>          + "group");<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    newGroupMap.remove(groupName);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    flushConfig(newGroupMap);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>  @Override<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  public List&lt;RSGroupInfo&gt; listRSGroups() {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    return Lists.newLinkedList(rsGroupMap.values());<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>  @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  public boolean isOnline() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    return rsGroupStartupWorker.isOnline();<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
+<span class="sourceLineNo">287</span><a name="line.287"></a>
+<span class="sourceLineNo">288</span>  @Override<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  public void moveServersAndTables(Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables,<a name="line.289"></a>
+<span class="sourceLineNo">290</span>                                   String srcGroup, String dstGroup) throws IOException {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    //get server's group<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    RSGroupInfo srcGroupInfo = getRSGroupInfo(srcGroup);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    RSGroupInfo dstGroupInfo = getRSGroupInfo(dstGroup);<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    //move servers<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    for (Address el: servers) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      srcGroupInfo.removeServer(el);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      dstGroupInfo.addServer(el);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    //move tables<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    for(TableName tableName: tables) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      srcGroupInfo.removeTable(tableName);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      dstGroupInfo.addTable(tableName);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>    //flush changed groupinfo<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    newGroupMap.put(srcGroupInfo.getName(), srcGroupInfo);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    newGroupMap.put(dstGroupInfo.getName(), dstGroupInfo);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    flushConfig(newGroupMap);<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 synchronized void removeServers(Set&lt;Address&gt; servers) throws IOException {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    Map&lt;String, RSGroupInfo&gt; rsGroupInfos = new HashMap&lt;String, RSGroupInfo&gt;();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    for (Address el: servers) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      RSGroupInfo rsGroupInfo = getRSGroupOfServer(el);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      if (rsGroupInfo != null) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        RSGroupInfo newRsGroupInfo = rsGroupInfos.get(rsGroupInfo.getName());<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        if (newRsGroupInfo == null) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          rsGroupInfo.removeServer(el);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          rsGroupInfos.put(rsGroupInfo.getName(), rsGroupInfo);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        } else {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          newRsGroupInfo.removeServer(el);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>          rsGroupInfos.put(newRsGroupInfo.getName(), newRsGroupInfo);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      }else {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        LOG.warn("Server " + el + " does not belong to any rsgroup.");<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    if (rsGroupInfos.size() &gt; 0) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      Map&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      newGroupMap.putAll(rsGroupInfos);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      flushConfig(newGroupMap);<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><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  List&lt;RSGroupInfo&gt; retrieveGroupListFromGroupTable() throws IOException {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    List&lt;RSGroupInfo&gt; rsGroupInfoList = Lists.newArrayList();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    for (Result result : rsGroupTable.getScanner(new Scan())) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      RSGroupProtos.RSGroupInfo proto = RSGroupProtos.RSGroupInfo.parseFrom(<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              result.getValue(META_FAMILY_BYTES, META_QUALIFIER_BYTES));<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      rsGroupInfoList.add(RSGroupProtobufUtil.toGroupInfo(proto));<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    return rsGroupInfoList;<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>  List&lt;RSGroupInfo&gt; retrieveGroupListFromZookeeper() throws IOException {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    List&lt;RSGroupInfo&gt; RSGroupInfoList = Lists.newArrayList();<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    //Overwrite any info stored by table, this takes precedence<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    try {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      if(ZKUtil.checkExists(watcher, groupBasePath) != -1) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        List&lt;String&gt; children = ZKUtil.listChildrenAndWatchForNewChildren(watcher, groupBasePath);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        if (children == null) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>          return RSGroupInfoList;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        for(String znode: children) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          byte[] data = ZKUtil.getData(watcher, ZNodePaths.joinZNode(groupBasePath, znode));<a name="line.360"></a>
+<span class="sourceLineNo">361</span>          if(data.length &gt; 0) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>            ProtobufUtil.expectPBMagicPrefix(data);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>            ByteArrayInputStream bis = new ByteArrayInputStream(<a name="line.363"></a>
+<span class="sourceLineNo">364</span>                data, ProtobufUtil.lengthOfPBMagic(), data.length);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>            RSGroupInfoList.add(RSGroupProtobufUtil.toGroupInfo(<a name="line.365"></a>
+<span class="sourceLineNo">366</span>                RSGroupProtos.RSGroupInfo.parseFrom(bis)));<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>        LOG.debug("Read ZK GroupInfo count:" + RSGroupInfoList.size());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    } catch (KeeperException|DeserializationException|InterruptedException e) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      throw new IOException("Failed to read rsGroupZNode",e);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    return RSGroupInfoList;<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 void refresh() throws IOException {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    refresh(false);<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>   * Read rsgroup info from the source of truth, the hbase:rsgroup table.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * Update zk cache. Called on startup of the manager.<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   */<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  private synchronized void refresh(boolean forceOnline) throws IOException {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    List&lt;RSGroupInfo&gt; groupList = new LinkedList&lt;&gt;();<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span>    // Overwrite anything read from zk, group table is source of truth<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    // if online read from GROUP table<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    if (forceOnline || isOnline()) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      LOG.debug("Refreshing in Online mode.");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      if (rsGroupTable == null) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        rsGroupTable = conn.getTable(RSGROUP_TABLE_NAME);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      groupList.addAll(retrieveGroupListFromGroupTable());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    } else {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      LOG.debug("Refreshing in Offline mode.");<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      groupList.addAll(retrieveGroupListFromZookeeper());<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>    // refresh default group, prune<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    NavigableSet&lt;TableName&gt; orphanTables = new TreeSet&lt;&gt;();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    for(String entry: masterServices.getTableDescriptors().getAll().keySet()) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      orphanTables.add(TableName.valueOf(entry));<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    for (RSGroupInfo group: groupList) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      if(!group.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        orphanTables.removeAll(group.getTables());<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>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span>    // This is added to the last of the list so it overwrites the 'default' rsgroup loaded<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    // from region group table or zk<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    groupList.add(new RSGroupInfo(RSGroupInfo.DEFAULT_GROUP, getDefaultServers(),<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        orphanTables));<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>    // populate the data<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    HashMap&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    HashMap&lt;TableName, String&gt; newTableMap = Maps.newHashMap();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    for (RSGroupInfo group : groupList) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      newGroupMap.put(group.getName(), group);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      for(TableName table: group.getTables()) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        newTableMap.put(table, group.getName());<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    resetRSGroupAndTableMaps(newGroupMap, newTableMap);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    updateCacheOfRSGroups(rsGroupMap.keySet());<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>  private synchronized Map&lt;TableName,String&gt; flushConfigTable(Map&lt;String,RSGroupInfo&gt; groupMap)<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Map&lt;TableName,String&gt; newTableMap = Maps.newHashMap();<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    List&lt;Mutation&gt; mutations = Lists.newArrayList();<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // populate deletes<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    for(String groupName : prevRSGroups) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      if(!groupMap.containsKey(groupName)) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        Delete d = new Delete(Bytes.toBytes(groupName));<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        mutations.add(d);<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>    resetRSGroupAndTableMaps(newGroupMap, newTableMap);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    updateCacheOfRSGroups(rsGroupMap.keySet());<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>  private synchronized Map&lt;TableName,String&gt; flushConfigTable(Map&lt;String,RSGroupInfo&gt; groupMap)<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      throws IOException {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    Map&lt;TableName,String&gt; newTableMap = Maps.newHashMap();<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    List&lt;Mutation&gt; mutations = Lists.newArrayList();<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span>    // populate deletes<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    for(String groupName : prevRSGroups) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      if(!groupMap.containsKey(groupName)) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        Delete d = new Delete(Bytes.toBytes(groupName));<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        mutations.add(d);<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>    // populate puts<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    for(RSGroupInfo RSGroupInfo : groupMap.values()) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      RSGroupProtos.RSGroupInfo proto = RSGroupProtobufUtil.toProtoGroupInfo(RSGroupInfo);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      Put p = new Put(Bytes.toBytes(RSGroupInfo.getName()));<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      p.addColumn(META_FAMILY_BYTES, META_QUALIFIER_BYTES, proto.toByteArray());<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      mutations.add(p);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      for(TableName entry: RSGroupInfo.getTables()) {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        newTableMap.put(entry, RSGroupInfo.getName());<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      }<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>    if(mutations.size() &gt; 0) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      multiMutate(mutations);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    return newTableMap;<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>  private synchronized void flushConfig()<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    flushConfig(this.rsGroupMap);<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>  private synchronized void flushConfig(Map&lt;String, RSGroupInfo&gt; newGroupMap)<a name="line.482"></a>
-<span class="sourceLineNo">483</span>  th

<TRUNCATED>

[18/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
index a99b4a7..119472c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
@@ -109,528 +109,529 @@
 <span class="sourceLineNo">101</span>  protected FileSystem fs;<a name="line.101"></a>
 <span class="sourceLineNo">102</span>  // id of this cluster<a name="line.102"></a>
 <span class="sourceLineNo">103</span>  private UUID clusterId;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // id of the other cluster<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  private UUID peerClusterId;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  // total number of edits we replicated<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private AtomicLong totalReplicatedEdits = new AtomicLong(0);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  // The znode we currently play with<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected String queueId;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  // Maximum number of retries before taking bold actions<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  private int maxRetriesMultiplier;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // Indicates if this particular source is running<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private volatile boolean sourceRunning = false;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  // Metrics for this source<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  private MetricsSource metrics;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  // WARN threshold for the number of queued logs, defaults to 2<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private int logQueueWarnThreshold;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  // ReplicationEndpoint which will handle the actual replication<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private volatile ReplicationEndpoint replicationEndpoint;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  // A filter (or a chain of filters) for the WAL entries.<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  protected WALEntryFilter walEntryFilter;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  // throttler<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private ReplicationThrottler throttler;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private long defaultBandwidth;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  private long currentBandwidth;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private WALFileLengthProvider walFileLengthProvider;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  protected final ConcurrentHashMap&lt;String, ReplicationSourceShipper&gt; workerThreads =<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      new ConcurrentHashMap&lt;&gt;();<a name="line.128"></a>
+<span class="sourceLineNo">104</span>  // total number of edits we replicated<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  private AtomicLong totalReplicatedEdits = new AtomicLong(0);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  // The znode we currently play with<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  protected String queueId;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // Maximum number of retries before taking bold actions<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  private int maxRetriesMultiplier;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  // Indicates if this particular source is running<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  private volatile boolean sourceRunning = false;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  // Metrics for this source<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  private MetricsSource metrics;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  // WARN threshold for the number of queued logs, defaults to 2<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  private int logQueueWarnThreshold;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  // ReplicationEndpoint which will handle the actual replication<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  private volatile ReplicationEndpoint replicationEndpoint;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  // A filter (or a chain of filters) for the WAL entries.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  protected volatile WALEntryFilter walEntryFilter;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  // throttler<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  private ReplicationThrottler throttler;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private long defaultBandwidth;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private long currentBandwidth;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  private WALFileLengthProvider walFileLengthProvider;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  protected final ConcurrentHashMap&lt;String, ReplicationSourceShipper&gt; workerThreads =<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      new ConcurrentHashMap&lt;&gt;();<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  private AtomicLong totalBufferUsed;<a name="line.128"></a>
 <span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private AtomicLong totalBufferUsed;<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public static final String WAIT_ON_ENDPOINT_SECONDS =<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    "hbase.replication.wait.on.endpoint.seconds";<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  public static final int DEFAULT_WAIT_ON_ENDPOINT_SECONDS = 30;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  private int waitOnEndpointSeconds = -1;<a name="line.135"></a>
+<span class="sourceLineNo">130</span>  public static final String WAIT_ON_ENDPOINT_SECONDS =<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    "hbase.replication.wait.on.endpoint.seconds";<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  public static final int DEFAULT_WAIT_ON_ENDPOINT_SECONDS = 30;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  private int waitOnEndpointSeconds = -1;<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private Thread initThread;<a name="line.135"></a>
 <span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  private Thread initThread;<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>   * Instantiation method used by region servers<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   * @param conf configuration to use<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   * @param fs file system to use<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * @param manager replication manager to ping to<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * @param server the server for this region server<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * @param queueId the id of our replication queue<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @param clusterId unique UUID for the cluster<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * @param metrics metrics for replication source<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  @Override<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  public void init(Configuration conf, FileSystem fs, ReplicationSourceManager manager,<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      ReplicationQueueStorage queueStorage, ReplicationPeer replicationPeer, Server server,<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      String queueId, UUID clusterId, WALFileLengthProvider walFileLengthProvider,<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      MetricsSource metrics) throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    this.server = server;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    this.waitOnEndpointSeconds =<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      this.conf.getInt(WAIT_ON_ENDPOINT_SECONDS, DEFAULT_WAIT_ON_ENDPOINT_SECONDS);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    decorateConf();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    this.sleepForRetries =<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        this.conf.getLong("replication.source.sleepforretries", 1000);    // 1 second<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    this.maxRetriesMultiplier =<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        this.conf.getInt("replication.source.maxretriesmultiplier", 300); // 5 minutes @ 1 sec per<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    this.queueSizePerGroup = this.conf.getInt("hbase.regionserver.maxlogs", 32);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    this.queueStorage = queueStorage;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    this.replicationPeer = replicationPeer;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    this.manager = manager;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    this.fs = fs;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    this.metrics = metrics;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    this.clusterId = clusterId;<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>    this.queueId = queueId;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    this.replicationQueueInfo = new ReplicationQueueInfo(queueId);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    // ReplicationQueueInfo parses the peerId out of the znode for us<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    this.peerId = this.replicationQueueInfo.getPeerId();<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    this.logQueueWarnThreshold = this.conf.getInt("replication.source.log.queue.warn", 2);<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>    defaultBandwidth = this.conf.getLong("replication.source.per.peer.node.bandwidth", 0);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    currentBandwidth = getCurrentBandwidth();<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    this.throttler = new ReplicationThrottler((double) currentBandwidth / 10.0);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    this.totalBufferUsed = manager.getTotalBufferUsed();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    this.walFileLengthProvider = walFileLengthProvider;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    LOG.info("queueId=" + queueId + ", ReplicationSource : " + peerId<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        + ", currentBandwidth=" + this.currentBandwidth);<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>  private void decorateConf() {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    String replicationCodec = this.conf.get(HConstants.REPLICATION_CODEC_CONF_KEY);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    if (StringUtils.isNotEmpty(replicationCodec)) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      this.conf.set(HConstants.RPC_CODEC_CONF_KEY, replicationCodec);<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><a name="line.192"></a>
-<span class="sourceLineNo">193</span>  @Override<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public void enqueueLog(Path log) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(log.getName());<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    PriorityBlockingQueue&lt;Path&gt; queue = queues.get(logPrefix);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    if (queue == null) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      queue = new PriorityBlockingQueue&lt;&gt;(queueSizePerGroup, new LogsComparator());<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      queues.put(logPrefix, queue);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      if (this.isSourceActive() &amp;&amp; this.replicationEndpoint != null) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        // new wal group observed after source startup, start a new worker thread to track it<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        // notice: it's possible that log enqueued when this.running is set but worker thread<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        // still not launched, so it's necessary to check workerThreads before start the worker<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        tryStartNewShipper(logPrefix, queue);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    queue.put(log);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    this.metrics.incrSizeOfLogQueue();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // This will log a warning for each new log that gets created above the warn threshold<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    int queueSize = queue.size();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    if (queueSize &gt; this.logQueueWarnThreshold) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      LOG.warn("WAL group " + logPrefix + " queue size: " + queueSize<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          + " exceeds value of replication.source.log.queue.warn: " + logQueueWarnThreshold);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    }<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 void addHFileRefs(TableName tableName, byte[] family, List&lt;Pair&lt;Path, Path&gt;&gt; pairs)<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      throws ReplicationException {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    Map&lt;TableName, List&lt;String&gt;&gt; tableCFMap = replicationPeer.getTableCFs();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    if (tableCFMap != null) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      List&lt;String&gt; tableCfs = tableCFMap.get(tableName);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      if (tableCFMap.containsKey(tableName)<a name="line.223"></a>
-<span class="sourceLineNo">224</span>          &amp;&amp; (tableCfs == null || tableCfs.contains(Bytes.toString(family)))) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        this.queueStorage.addHFileRefs(peerId, pairs);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        metrics.incrSizeOfHFileRefsQueue(pairs.size());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      } else {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        LOG.debug("HFiles will not be replicated belonging to the table " + tableName + " family "<a name="line.228"></a>
-<span class="sourceLineNo">229</span>            + Bytes.toString(family) + " to peer id " + peerId);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    } else {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      // user has explicitly not defined any table cfs for replication, means replicate all the<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // data<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      this.queueStorage.addHFileRefs(peerId, pairs);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      metrics.incrSizeOfHFileRefsQueue(pairs.size());<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 ReplicationEndpoint createReplicationEndpoint()<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    RegionServerCoprocessorHost rsServerHost = null;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    if (server instanceof HRegionServer) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      rsServerHost = ((HRegionServer) server).getRegionServerCoprocessorHost();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    String replicationEndpointImpl = replicationPeer.getPeerConfig().getReplicationEndpointImpl();<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>    ReplicationEndpoint replicationEndpoint;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (replicationEndpointImpl == null) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      // Default to HBase inter-cluster replication endpoint; skip reflection<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      replicationEndpoint = new HBaseInterClusterReplicationEndpoint();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    } else {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      try {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        replicationEndpoint = Class.forName(replicationEndpointImpl)<a name="line.253"></a>
-<span class="sourceLineNo">254</span>            .asSubclass(ReplicationEndpoint.class)<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            .getDeclaredConstructor()<a name="line.255"></a>
-<span class="sourceLineNo">256</span>            .newInstance();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      } catch (NoSuchMethodException | InvocationTargetException e) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        throw new IllegalArgumentException(e);<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>    if (rsServerHost != null) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      ReplicationEndpoint newReplicationEndPoint =<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        rsServerHost.postCreateReplicationEndPoint(replicationEndpoint);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      if (newReplicationEndPoint != null) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        // Override the newly created endpoint from the hook with configured end point<a name="line.265"></a>
-<span class="sourceLineNo">266</span>        replicationEndpoint = newReplicationEndPoint;<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>    return replicationEndpoint;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private void initAndStartReplicationEndpoint(ReplicationEndpoint replicationEndpoint)<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      throws IOException, TimeoutException {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    TableDescriptors tableDescriptors = null;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    if (server instanceof HRegionServer) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      tableDescriptors = ((HRegionServer) server).getTableDescriptors();<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    }<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    replicationEndpoint<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        .init(new ReplicationEndpoint.Context(conf, replicationPeer.getConfiguration(), fs, peerId,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>            clusterId, replicationPeer, metrics, tableDescriptors, server));<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    replicationEndpoint.start();<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    replicationEndpoint.awaitRunning(waitOnEndpointSeconds, TimeUnit.SECONDS);<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>  private void initializeWALEntryFilter() {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    // get the WALEntryFilter from ReplicationEndpoint and add it to default filters<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    ArrayList&lt;WALEntryFilter&gt; filters =<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      Lists.&lt;WALEntryFilter&gt; newArrayList(new SystemTableWALEntryFilter());<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    WALEntryFilter filterFromEndpoint = this.replicationEndpoint.getWALEntryfilter();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    if (filterFromEndpoint != null) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      filters.add(filterFromEndpoint);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    filters.add(new ClusterMarkingEntryFilter(clusterId, peerClusterId, replicationEndpoint));<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    this.walEntryFilter = new ChainWALEntryFilter(filters);<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>  private void tryStartNewShipper(String walGroupId, PriorityBlockingQueue&lt;Path&gt; queue) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    ReplicationSourceShipper worker = createNewShipper(walGroupId, queue);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    ReplicationSourceShipper extant = workerThreads.putIfAbsent(walGroupId, worker);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    if (extant != null) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      LOG.debug("Someone has beat us to start a worker thread for wal group {}", walGroupId);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    } else {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      LOG.debug("Starting up worker for wal group {}", walGroupId);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      ReplicationSourceWALReader walReader =<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        createNewWALReader(walGroupId, queue, worker.getStartPosition());<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      Threads.setDaemonThreadRunning(walReader, Thread.currentThread().getName() +<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        ".replicationSource.wal-reader." + walGroupId + "," + queueId, this::uncaughtException);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      worker.setWALReader(walReader);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      worker.startup(this::uncaughtException);<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><a name="line.312"></a>
-<span class="sourceLineNo">313</span>  protected ReplicationSourceShipper createNewShipper(String walGroupId,<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      PriorityBlockingQueue&lt;Path&gt; queue) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    return new ReplicationSourceShipper(conf, walGroupId, queue, this);<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>  private ReplicationSourceWALReader createNewWALReader(String walGroupId,<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      PriorityBlockingQueue&lt;Path&gt; queue, long startPosition) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    return replicationPeer.getPeerConfig().isSerial()<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      ? new SerialReplicationSourceWALReader(fs, conf, queue, startPosition, walEntryFilter, this)<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      : new ReplicationSourceWALReader(fs, conf, queue, startPosition, walEntryFilter, this);<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>  protected final void uncaughtException(Thread t, Throwable e) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    RSRpcServices.exitIfOOME(e);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    LOG.error("Unexpected exception in " + t.getName() + " currentPath=" + getCurrentPath(), e);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    server.abort("Unexpected exception in " + t.getName(), e);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  @Override<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public ReplicationEndpoint getReplicationEndpoint() {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    return this.replicationEndpoint;<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>  @Override<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  public ReplicationSourceManager getSourceManager() {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    return this.manager;<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>  @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  public void tryThrottle(int batchSize) throws InterruptedException {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    checkBandwidthChangeAndResetThrottler();<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    if (throttler.isEnabled()) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      long sleepTicks = throttler.getNextSleepInterval(batchSize);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      if (sleepTicks &gt; 0) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        if (LOG.isTraceEnabled()) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>          LOG.trace("To sleep " + sleepTicks + "ms for throttling control");<a name="line.348"></a>
-<span class="sourceLineNo">349</span>        }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        Thread.sleep(sleepTicks);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        // reset throttler's cycle start tick when sleep for throttling occurs<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        throttler.resetStartTick();<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      }<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><a name="line.356"></a>
-<span class="sourceLineNo">357</span>  private void checkBandwidthChangeAndResetThrottler() {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    long peerBandwidth = getCurrentBandwidth();<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    if (peerBandwidth != currentBandwidth) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      currentBandwidth = peerBandwidth;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      throttler.setBandwidth((double) currentBandwidth / 10.0);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      LOG.info("ReplicationSource : " + peerId<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          + " bandwidth throttling changed, currentBandWidth=" + currentBandwidth);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    }<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>  private long getCurrentBandwidth() {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    long peerBandwidth = replicationPeer.getPeerBandwidth();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    // user can set peer bandwidth to 0 to use default bandwidth<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return peerBandwidth != 0 ? peerBandwidth : defaultBandwidth;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  }<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>   * Do the sleeping logic<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * @param msg Why we sleep<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   * @param sleepMultiplier by how many times the default sleeping time is augmented<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   * @return True if &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   */<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  protected boolean sleepForRetries(String msg, int sleepMultiplier) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    try {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      if (LOG.isTraceEnabled()) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        LOG.trace(msg + ", sleeping " + sleepForRetries + " times " + sleepMultiplier);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      }<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      Thread.sleep(this.sleepForRetries * sleepMultiplier);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    } catch (InterruptedException e) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      LOG.debug("Interrupted while sleeping between retries");<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      Thread.currentThread().interrupt();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return sleepMultiplier &lt; maxRetriesMultiplier;<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>   * check whether the peer is enabled or not<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   * @return true if the peer is enabled, otherwise false<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   */<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  @Override<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  public boolean isPeerEnabled() {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    return replicationPeer.isPeerEnabled();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  private void initialize() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    int sleepMultiplier = 1;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    while (this.isSourceActive()) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      ReplicationEndpoint replicationEndpoint;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      try {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        replicationEndpoint = createReplicationEndpoint();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      } catch (Exception e) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        LOG.warn("error creating ReplicationEndpoint, retry", e);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        if (sleepForRetries("Error creating ReplicationEndpoint", sleepMultiplier)) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          sleepMultiplier++;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        continue;<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>      try {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        initAndStartReplicationEndpoint(replicationEndpoint);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        this.replicationEndpoint = replicationEndpoint;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        break;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      } catch (Exception e) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        LOG.warn("Error starting ReplicationEndpoint, retry", e);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        replicationEndpoint.stop();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        if (sleepForRetries("Error starting ReplicationEndpoint", sleepMultiplier)) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          sleepMultiplier++;<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>    }<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    if (!this.isSourceActive()) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      return;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>    sleepMultiplier = 1;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    // delay this until we are in an asynchronous thread<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    while (this.isSourceActive() &amp;&amp; this.peerClusterId == null) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      this.peerClusterId = replicationEndpoint.getPeerUUID();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      if (this.isSourceActive() &amp;&amp; this.peerClusterId == null) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        if (sleepForRetries("Cannot contact the peer's zk ensemble", sleepMultiplier)) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>          sleepMultiplier++;<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><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    // In rare case, zookeeper setting may be messed up. That leads to the incorrect<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    // peerClusterId value, which is the same as the source clusterId<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    if (clusterId.equals(peerClusterId) &amp;&amp; !replicationEndpoint.canReplicateToSameCluster()) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      this.terminate("ClusterId " + clusterId + " is replicating to itself: peerClusterId "<a name="line.446"></a>
-<span class="sourceLineNo">447</span>          + peerClusterId + " which is not allowed by ReplicationEndpoint:"<a name="line.447"></a>
-<span class="sourceLineNo">448</span>          + replicationEndpoint.getClass().getName(), null, false);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      this.manager.removeSource(this);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      return;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    }<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    LOG.info("Replicating " + clusterId + " -&gt; " + peerClusterId);<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>    initializeWALEntryFilter();<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    // start workers<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    for (Map.Entry&lt;String, PriorityBlockingQueue&lt;Path&gt;&gt; entry : queues.entrySet()) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      String walGroupId = entry.getKey();<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      PriorityBlockingQueue&lt;Path&gt; queue = entry.getValue();<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      tryStartNewShipper(walGroupId, queue);<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><a name="line.462"></a>
-<span class="sourceLineNo">463</span>  @Override<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  public void startup() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    // mark we are running now<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    this.sourceRunning = true;<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    initThread = new Thread(this::initialize);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    Threads.setDaemonThreadRunning(initThread,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      Thread.currentThread().getName() + ".replicationSource," + this.queueId,<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      this::uncaughtException);<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>  @Override<a name="line.473"></a>
-<span class="sourceLineNo">474</span>  public void terminate(String reason) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    terminate(reason, null);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  @Override<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  public void terminate(String reason, Exception cause) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    terminate(reason, cause, true);<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>  public void terminate(String reason, Exception cause, boolean join) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    if (cause == null) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      LOG.info("Closing source " + this.queueId + " because: " + reason);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    } else {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      LOG.error("Closing source " + this.queueId + " because an error occurred: " + reason,<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        cause);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    this.sourceRunning = false;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    if (initThread != null &amp;&amp; Thread.currentThread() != initThread) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      // This usually won't happen but anyway, let's wait until the initialization thread exits.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      // And notice that we may call terminate directly from the initThread so here we need to<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      // avoid join on ourselves.<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      initThread.interrupt();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      Threads.shutdown(initThread, this.sleepForRetries);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    Collection&lt;ReplicationSourceShipper&gt; workers = workerThreads.values();<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    for (ReplicationSourceShipper worker : workers) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      worker.stopWorker();<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      worker.entryReader.interrupt();<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      worker.interrupt();<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    if (this.replicationEndpoint != null) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      this.replicationEndpoint.stop();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (join) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      for (ReplicationSourceShipper worker : workers) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        Threads.shutdown(worker, this.sleepForRetries);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        LOG.info("ReplicationSourceWorker " + worker.getName() + " terminated");<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      if (this.replicationEndpoint != null) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        try {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          this.replicationEndpoint.awaitTerminated(sleepForRetries * maxRetriesMultiplier,<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            TimeUnit.MILLISECONDS);<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        } catch (TimeoutException te) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>          LOG.warn("Got exception while waiting for endpoint to shutdown for replication source :" +<a name="line.517"></a>
-<span class="sourceLineNo">518</span>            this.queueId, te);<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>    }<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    this.metrics.clear();<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>  @Override<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  public String getQueueId() {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    return this.queueId;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>  @Override<a name="line.530"></a>
-<span class="sourceLineNo">531</span>  public String getPeerId() {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    return this.peerId;<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>  @Override<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  public Path getCurrentPath() {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    // only for testing<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    for (ReplicationSourceShipper worker : workerThreads.values()) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      if (worker.getCurrentPath() != null) {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        return worker.getCurrentPath();<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>    return null;<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>  @Override<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  public boolean isSourceActive() {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    return !this.server.isStopped() &amp;&amp; this.sourceRunning;<a name="line.548"></a>
-<span class="sourceLineNo">549</span>  }<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>   * Comparator used to compare logs together based on their start time<a name="line.552"></a>
-<span class="sourceLineNo">553</span>   */<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  public static class LogsComparator implements Comparator&lt;Path&gt; {<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    @Override<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    public int compare(Path o1, Path o2) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      return Long.compare(getTS(o1), getTS(o2));<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    }<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>     * Split a path to get the start time<a name="line.562"></a>
-<span class="sourceLineNo">563</span>     * For example: 10.20.20.171%3A60020.1277499063250<a name="line.563"></a>
-<span class="sourceLineNo">564</span>     * @param p path to split<a name="line.564"></a>
-<span class="sourceLineNo">565</span>     * @return start time<a name="line.565"></a>
-<span class="sourceLineNo">566</span>     */<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    private static long getTS(Path p) {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      int tsIndex = p.getName().lastIndexOf('.') + 1;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      return Long.parseLong(p.getName().substring(tsIndex));<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>  @Override<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  public String getStats() {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    StringBuilder sb = new StringBuilder();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    sb.append("Total replicated edits: ").append(totalReplicatedEdits)<a name="line.576"></a>
-<span class="sourceLineNo">577</span>        .append(", current progress: \n");<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    for (Map.Entry&lt;String, ReplicationSourceShipper&gt; entry : workerThreads.entrySet()) {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      String walGroupId = entry.getKey();<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      ReplicationSourceShipper worker = entry.getValue();<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      long position = worker.getCurrentPosition();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      Path currentPath = worker.getCurrentPath();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>      sb.append("walGroup [").append(walGroupId).append("]: ");<a name="line.583"></a>
-<span class="sourceLineNo">584</span>      if (currentPath != null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        sb.append("currently replicating from: ").append(currentPath).append(" at position: ")<a name="line.585"></a>
-<span class="sourceLineNo">586</span>            .append(position).append("\n");<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      } else {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        sb.append("no replication ongoing, waiting for new log");<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      }<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    return sb.toString();<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>  @Override<a name="line.594"></a>
-<span class="sourceLineNo">595</span>  public MetricsSource getSourceMetrics() {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    return this.metrics;<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>  @Override<a name="line.599"></a>
-<span class="sourceLineNo">600</span>  public void postShipEdits(List&lt;Entry&gt; entries, int batchSize) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    if (throttler.isEnabled()) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      throttler.addPushSize(batchSize);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    totalReplicatedEdits.addAndGet(entries.size());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    totalBufferUsed.addAndGet(-batchSize);<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>  @Override<a name="line.608"></a>
-<span class="sourceLineNo">609</span>  public WALFileLengthProvider getWALFileLengthProvider() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return walFileLengthProvider;<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>  @Override<a name="line.613"></a>
-<span class="sourceLineNo">614</span>  public ServerName getServerWALsBelongTo() {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    return server.getServerName();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>  Server getServer() {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    return server;<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>  ReplicationQueueStorage getQueueStorage() {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    return queueStorage;<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">137</span>  /**<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   * Instantiation method used by region servers<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * @param conf configuration to use<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   * @param fs file system to use<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * @param manager replication manager to ping to<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   * @param server the server for this region server<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * @param queueId the id of our replication queue<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * @param clusterId unique UUID for the cluster<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * @param metrics metrics for replication source<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 void init(Configuration conf, FileSystem fs, ReplicationSourceManager manager,<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      ReplicationQueueStorage queueStorage, ReplicationPeer replicationPeer, Server server,<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      String queueId, UUID clusterId, WALFileLengthProvider walFileLengthProvider,<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      MetricsSource metrics) throws IOException {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    this.server = server;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    this.waitOnEndpointSeconds =<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      this.conf.getInt(WAIT_ON_ENDPOINT_SECONDS, DEFAULT_WAIT_ON_ENDPOINT_SECONDS);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    decorateConf();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    this.sleepForRetries =<a name="line.157"></a>
+<span class="sourceLineNo">158</span>        this.conf.getLong("replication.source.sleepforretries", 1000);    // 1 second<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    this.maxRetriesMultiplier =<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        this.conf.getInt("replication.source.maxretriesmultiplier", 300); // 5 minutes @ 1 sec per<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    this.queueSizePerGroup = this.conf.getInt("hbase.regionserver.maxlogs", 32);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    this.queueStorage = queueStorage;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    this.replicationPeer = replicationPeer;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    this.manager = manager;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    this.fs = fs;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    this.metrics = metrics;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    this.clusterId = clusterId;<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    this.queueId = queueId;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    this.replicationQueueInfo = new ReplicationQueueInfo(queueId);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // ReplicationQueueInfo parses the peerId out of the znode for us<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    this.peerId = this.replicationQueueInfo.getPeerId();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    this.logQueueWarnThreshold = this.conf.getInt("replication.source.log.queue.warn", 2);<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    defaultBandwidth = this.conf.getLong("replication.source.per.peer.node.bandwidth", 0);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    currentBandwidth = getCurrentBandwidth();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    this.throttler = new ReplicationThrottler((double) currentBandwidth / 10.0);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    this.totalBufferUsed = manager.getTotalBufferUsed();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    this.walFileLengthProvider = walFileLengthProvider;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    LOG.info("queueId=" + queueId + ", ReplicationSource : " + peerId<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        + ", currentBandwidth=" + this.currentBandwidth);<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>  private void decorateConf() {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    String replicationCodec = this.conf.get(HConstants.REPLICATION_CODEC_CONF_KEY);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    if (StringUtils.isNotEmpty(replicationCodec)) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      this.conf.set(HConstants.RPC_CODEC_CONF_KEY, replicationCodec);<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><a name="line.190"></a>
+<span class="sourceLineNo">191</span>  @Override<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  public void enqueueLog(Path log) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(log.getName());<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    PriorityBlockingQueue&lt;Path&gt; queue = queues.get(logPrefix);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    if (queue == null) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      queue = new PriorityBlockingQueue&lt;&gt;(queueSizePerGroup, new LogsComparator());<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      queues.put(logPrefix, queue);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      if (this.isSourceActive() &amp;&amp; this.walEntryFilter != null) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        // new wal group observed after source startup, start a new worker thread to track it<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        // notice: it's possible that log enqueued when this.running is set but worker thread<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        // still not launched, so it's necessary to check workerThreads before start the worker<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        tryStartNewShipper(logPrefix, queue);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    queue.put(log);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    this.metrics.incrSizeOfLogQueue();<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    // This will log a warning for each new log that gets created above the warn threshold<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    int queueSize = queue.size();<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    if (queueSize &gt; this.logQueueWarnThreshold) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      LOG.warn("WAL group " + logPrefix + " queue size: " + queueSize<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          + " exceeds value of replication.source.log.queue.warn: " + logQueueWarnThreshold);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<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 void addHFileRefs(TableName tableName, byte[] family, List&lt;Pair&lt;Path, Path&gt;&gt; pairs)<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      throws ReplicationException {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    Map&lt;TableName, List&lt;String&gt;&gt; tableCFMap = replicationPeer.getTableCFs();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    if (tableCFMap != null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      List&lt;String&gt; tableCfs = tableCFMap.get(tableName);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      if (tableCFMap.containsKey(tableName)<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          &amp;&amp; (tableCfs == null || tableCfs.contains(Bytes.toString(family)))) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>        this.queueStorage.addHFileRefs(peerId, pairs);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        metrics.incrSizeOfHFileRefsQueue(pairs.size());<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      } else {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        LOG.debug("HFiles will not be replicated belonging to the table " + tableName + " family "<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            + Bytes.toString(family) + " to peer id " + peerId);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    } else {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      // user has explicitly not defined any table cfs for replication, means replicate all the<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      // data<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      this.queueStorage.addHFileRefs(peerId, pairs);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      metrics.incrSizeOfHFileRefsQueue(pairs.size());<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>  private ReplicationEndpoint createReplicationEndpoint()<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    RegionServerCoprocessorHost rsServerHost = null;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    if (server instanceof HRegionServer) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      rsServerHost = ((HRegionServer) server).getRegionServerCoprocessorHost();<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    String replicationEndpointImpl = replicationPeer.getPeerConfig().getReplicationEndpointImpl();<a name="line.243"></a>
+<span class="sourceLineNo">244</span><a name="line.244"></a>
+<span class="sourceLineNo">245</span>    ReplicationEndpoint replicationEndpoint;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    if (replicationEndpointImpl == null) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      // Default to HBase inter-cluster replication endpoint; skip reflection<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      replicationEndpoint = new HBaseInterClusterReplicationEndpoint();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    } else {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      try {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        replicationEndpoint = Class.forName(replicationEndpointImpl)<a name="line.251"></a>
+<span class="sourceLineNo">252</span>            .asSubclass(ReplicationEndpoint.class)<a name="line.252"></a>
+<span class="sourceLineNo">253</span>            .getDeclaredConstructor()<a name="line.253"></a>
+<span class="sourceLineNo">254</span>            .newInstance();<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      } catch (NoSuchMethodException | InvocationTargetException e) {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        throw new IllegalArgumentException(e);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    if (rsServerHost != null) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      ReplicationEndpoint newReplicationEndPoint =<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        rsServerHost.postCreateReplicationEndPoint(replicationEndpoint);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      if (newReplicationEndPoint != null) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>        // Override the newly created endpoint from the hook with configured end point<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        replicationEndpoint = newReplicationEndPoint;<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 replicationEndpoint;<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>  private void initAndStartReplicationEndpoint(ReplicationEndpoint replicationEndpoint)<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      throws IOException, TimeoutException {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    TableDescriptors tableDescriptors = null;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    if (server instanceof HRegionServer) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      tableDescriptors = ((HRegionServer) server).getTableDescriptors();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    replicationEndpoint<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        .init(new ReplicationEndpoint.Context(conf, replicationPeer.getConfiguration(), fs, peerId,<a name="line.277"></a>
+<span class="sourceLineNo">278</span>            clusterId, replicationPeer, metrics, tableDescriptors, server));<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    replicationEndpoint.start();<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    replicationEndpoint.awaitRunning(waitOnEndpointSeconds, TimeUnit.SECONDS);<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>  private void initializeWALEntryFilter(UUID peerClusterId) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    // get the WALEntryFilter from ReplicationEndpoint and add it to default filters<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    ArrayList&lt;WALEntryFilter&gt; filters =<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      Lists.&lt;WALEntryFilter&gt; newArrayList(new SystemTableWALEntryFilter());<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    WALEntryFilter filterFromEndpoint = this.replicationEndpoint.getWALEntryfilter();<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    if (filterFromEndpoint != null) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      filters.add(filterFromEndpoint);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    filters.add(new ClusterMarkingEntryFilter(clusterId, peerClusterId, replicationEndpoint));<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    this.walEntryFilter = new ChainWALEntryFilter(filters);<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>  private void tryStartNewShipper(String walGroupId, PriorityBlockingQueue&lt;Path&gt; queue) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    ReplicationSourceShipper worker = createNewShipper(walGroupId, queue);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    ReplicationSourceShipper extant = workerThreads.putIfAbsent(walGroupId, worker);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    if (extant != null) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      LOG.debug("Someone has beat us to start a worker thread for wal group {}", walGroupId);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    } else {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      LOG.debug("Starting up worker for wal group {}", walGroupId);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      ReplicationSourceWALReader walReader =<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        createNewWALReader(walGroupId, queue, worker.getStartPosition());<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      Threads.setDaemonThreadRunning(walReader, Thread.currentThread().getName() +<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        ".replicationSource.wal-reader." + walGroupId + "," + queueId, this::uncaughtException);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      worker.setWALReader(walReader);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      worker.startup(this::uncaughtException);<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>  protected ReplicationSourceShipper createNewShipper(String walGroupId,<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      PriorityBlockingQueue&lt;Path&gt; queue) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    return new ReplicationSourceShipper(conf, walGroupId, queue, this);<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>  private ReplicationSourceWALReader createNewWALReader(String walGroupId,<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      PriorityBlockingQueue&lt;Path&gt; queue, long startPosition) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    return replicationPeer.getPeerConfig().isSerial()<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      ? new SerialReplicationSourceWALReader(fs, conf, queue, startPosition, walEntryFilter, this)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      : new ReplicationSourceWALReader(fs, conf, queue, startPosition, walEntryFilter, 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>  protected final void uncaughtException(Thread t, Throwable e) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    RSRpcServices.exitIfOOME(e);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    LOG.error("Unexpected exception in " + t.getName() + " currentPath=" + getCurrentPath(), e);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    server.abort("Unexpected exception in " + t.getName(), e);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  @Override<a name="line.329"></a>
+<span class="sourceLineNo">330</span>  public ReplicationEndpoint getReplicationEndpoint() {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    return this.replicationEndpoint;<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 ReplicationSourceManager getSourceManager() {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    return this.manager;<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 void tryThrottle(int batchSize) throws InterruptedException {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    checkBandwidthChangeAndResetThrottler();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    if (throttler.isEnabled()) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      long sleepTicks = throttler.getNextSleepInterval(batchSize);<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      if (sleepTicks &gt; 0) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        if (LOG.isTraceEnabled()) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>          LOG.trace("To sleep " + sleepTicks + "ms for throttling control");<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        }<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        Thread.sleep(sleepTicks);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        // reset throttler's cycle start tick when sleep for throttling occurs<a name="line.349"></a>
+<span class="sourceLineNo">350</span>        throttler.resetStartTick();<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>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  private void checkBandwidthChangeAndResetThrottler() {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    long peerBandwidth = getCurrentBandwidth();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    if (peerBandwidth != currentBandwidth) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      currentBandwidth = peerBandwidth;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      throttler.setBandwidth((double) currentBandwidth / 10.0);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      LOG.info("ReplicationSource : " + peerId<a name="line.360"></a>
+<span class="sourceLineNo">361</span>          + " bandwidth throttling changed, currentBandWidth=" + currentBandwidth);<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><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  private long getCurrentBandwidth() {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    long peerBandwidth = replicationPeer.getPeerBandwidth();<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    // user can set peer bandwidth to 0 to use default bandwidth<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    return peerBandwidth != 0 ? peerBandwidth : defaultBandwidth;<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>   * Do the sleeping logic<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * @param msg Why we sleep<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * @param sleepMultiplier by how many times the default sleeping time is augmented<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * @return True if &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  protected boolean sleepForRetries(String msg, int sleepMultiplier) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    try {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      if (LOG.isTraceEnabled()) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        LOG.trace(msg + ", sleeping " + sleepForRetries + " times " + sleepMultiplier);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      Thread.sleep(this.sleepForRetries * sleepMultiplier);<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    } catch (InterruptedException e) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      LOG.debug("Interrupted while sleeping between retries");<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      Thread.currentThread().interrupt();<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return sleepMultiplier &lt; maxRetriesMultiplier;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * check whether the peer is enabled or not<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @return true if the peer is enabled, otherwise false<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 boolean isPeerEnabled() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    return replicationPeer.isPeerEnabled();<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  }<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>  private void initialize() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    int sleepMultiplier = 1;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    while (this.isSourceActive()) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      ReplicationEndpoint replicationEndpoint;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      try {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        replicationEndpoint = createReplicationEndpoint();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      } catch (Exception e) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        LOG.warn("error creating ReplicationEndpoint, retry", e);<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        if (sleepForRetries("Error creating ReplicationEndpoint", sleepMultiplier)) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          sleepMultiplier++;<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        }<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        continue;<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>      try {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        initAndStartReplicationEndpoint(replicationEndpoint);<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        this.replicationEndpoint = replicationEndpoint;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        break;<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      } catch (Exception e) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        LOG.warn("Error starting ReplicationEndpoint, retry", e);<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        replicationEndpoint.stop();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        if (sleepForRetries("Error starting ReplicationEndpoint", sleepMultiplier)) {<a name="line.420"></a>
+<span class="sourceLineNo">421</span>          sleepMultiplier++;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        }<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      }<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    }<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span>    if (!this.isSourceActive()) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      return;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>    sleepMultiplier = 1;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    UUID peerClusterId;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    // delay this until we are in an asynchronous thread<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    for (;;) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      peerClusterId = replicationEndpoint.getPeerUUID();<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      if (this.isSourceActive() &amp;&amp; peerClusterId == null) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>        if (sleepForRetries("Cannot contact the peer's zk ensemble", sleepMultiplier)) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>          sleepMultiplier++;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>        }<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      } else {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        break;<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>    // In rare case, zookeeper setting may be messed up. That leads to the incorrect<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    // peerClusterId value, which is the same as the source clusterId<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    if (clusterId.equals(peerClusterId) &amp;&amp; !replicationEndpoint.canReplicateToSameCluster()) {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      this.terminate("ClusterId " + clusterId + " is replicating to itself: peerClusterId "<a name="line.447"></a>
+<span class="sourceLineNo">448</span>          + peerClusterId + " which is not allowed by ReplicationEndpoint:"<a name="line.448"></a>
+<span class="sourceLineNo">449</span>          + replicationEndpoint.getClass().getName(), null, false);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      this.manager.removeSource(this);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      return;<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    }<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    LOG.info("Replicating " + clusterId + " -&gt; " + peerClusterId);<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>    initializeWALEntryFilter(peerClusterId);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    // start workers<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    for (Map.Entry&lt;String, PriorityBlockingQueue&lt;Path&gt;&gt; entry : queues.entrySet()) {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>      String walGroupId = entry.getKey();<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      PriorityBlockingQueue&lt;Path&gt; queue = entry.getValue();<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      tryStartNewShipper(walGroupId, queue);<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
+

<TRUNCATED>

[43/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowByteBufferExtendedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowByteBufferExtendedCell.html b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowByteBufferExtendedCell.html
index aa631c6..a498c48 100644
--- a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowByteBufferExtendedCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowByteBufferExtendedCell.html
@@ -119,7 +119,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
@@ -280,7 +280,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.EmptyByteBu
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowCell.html b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowCell.html
index 200d182..5689fb8 100644
--- a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowCell.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
@@ -277,7 +277,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.EmptyCell.h
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColByteBufferExtendedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColByteBufferExtendedCell.html b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColByteBufferExtendedCell.html
index d35235b..3d6a018 100644
--- a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColByteBufferExtendedCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColByteBufferExtendedCell.html
@@ -124,7 +124,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
@@ -308,7 +308,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowB
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColCell.html b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColCell.html
index adb0bcd..3459151 100644
--- a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColCell.html
@@ -119,7 +119,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
@@ -308,7 +308,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowC
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColTSByteBufferExtendedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColTSByteBufferExtendedCell.html b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColTSByteBufferExtendedCell.html
index 4e8ee48..c88170e 100644
--- a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColTSByteBufferExtendedCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColTSByteBufferExtendedCell.html
@@ -129,7 +129,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Enclosing class:</dt>
@@ -277,7 +277,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowC
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColTSCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColTSCell.html b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColTSCell.html
index 1279a98..c77ab5d 100644
--- a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColTSCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColTSCell.html
@@ -124,7 +124,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Enclosing class:</dt>
@@ -272,7 +272,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowC
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowDeleteFamilyCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowDeleteFamilyCell.html b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowDeleteFamilyCell.html
index 87f3014..2dc702d 100644
--- a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowDeleteFamilyCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowDeleteFamilyCell.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Enclosing class:</dt>
@@ -275,7 +275,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.EmptyCell.h
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowByteBufferExtendedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowByteBufferExtendedCell.html b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowByteBufferExtendedCell.html
index d995724..f8b4e12 100644
--- a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowByteBufferExtendedCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowByteBufferExtendedCell.html
@@ -119,7 +119,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
@@ -280,7 +280,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.EmptyByteBu
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowCell.html b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowCell.html
index f506ae3..326c073 100644
--- a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowCell.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
@@ -277,7 +277,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.EmptyCell.h
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowColByteBufferExtendedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowColByteBufferExtendedCell.html b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowColByteBufferExtendedCell.html
index 359804b..22baae3 100644
--- a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowColByteBufferExtendedCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowColByteBufferExtendedCell.html
@@ -124,7 +124,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Enclosing class:</dt>
@@ -304,7 +304,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowBy
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowColCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowColCell.html b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowColCell.html
index ea4ffc7..4602297 100644
--- a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowColCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowColCell.html
@@ -119,7 +119,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Enclosing class:</dt>
@@ -304,7 +304,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowCe
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.TagRewriteByteBufferExtendedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.TagRewriteByteBufferExtendedCell.html b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.TagRewriteByteBufferExtendedCell.html
index 4111b65..aca6101 100644
--- a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.TagRewriteByteBufferExtendedCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.TagRewriteByteBufferExtendedCell.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
@@ -406,7 +406,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/ByteBufferExtendedCell.html
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.TagRewriteCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.TagRewriteCell.html b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.TagRewriteCell.html
index 79935dc..fed350a 100644
--- a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.TagRewriteCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.TagRewriteCell.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
@@ -365,7 +365,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.ValueAndTagRewriteByteBufferExtendedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.ValueAndTagRewriteByteBufferExtendedCell.html b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.ValueAndTagRewriteByteBufferExtendedCell.html
index ef2d953..b06f114 100644
--- a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.ValueAndTagRewriteByteBufferExtendedCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.ValueAndTagRewriteByteBufferExtendedCell.html
@@ -119,7 +119,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Enclosing class:</dt>
@@ -291,7 +291,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.TagRewriteB
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.ValueAndTagRewriteCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.ValueAndTagRewriteCell.html b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.ValueAndTagRewriteCell.html
index dec4c11..8c931df 100644
--- a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.ValueAndTagRewriteCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.ValueAndTagRewriteCell.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Enclosing class:</dt>
@@ -300,7 +300,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.TagRewriteC
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/ServerName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ServerName.html b/devapidocs/org/apache/hadoop/hbase/ServerName.html
index 1143237..13a8749 100644
--- a/devapidocs/org/apache/hadoop/hbase/ServerName.html
+++ b/devapidocs/org/apache/hadoop/hbase/ServerName.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":42,"i4":10,"i5":41,"i6":10,"i7":10,"i8":41,"i9":41,"i10":41,"i11":41,"i12":10,"i13":10,"i14":10,"i15":9,"i16":9,"i17":41,"i18":41,"i19":9,"i20":41,"i21":9,"i22":10,"i23":10,"i24":9,"i25":9,"i26":9};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":42,"i4":10,"i5":10,"i6":41,"i7":10,"i8":10,"i9":41,"i10":41,"i11":41,"i12":41,"i13":10,"i14":10,"i15":10,"i16":9,"i17":9,"i18":41,"i19":41,"i20":9,"i21":41,"i22":9,"i23":10,"i24":10,"i25":9,"i26":9,"i27":9};
 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";
@@ -297,6 +297,10 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#getHostname--">getHostname</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i5" 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/ServerName.html#getHostnameLowerCase--">getHostnameLowerCase</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>(package private) static <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/ServerName.html#getHostNameMinusDomain-java.lang.String-">getHostNameMinusDomain</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;hostname)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -304,15 +308,15 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 </div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#getPort--">getPort</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" 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/ServerName.html#getServerName--">getServerName</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>(package private) static <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/ServerName.html#getServerName-java.lang.String-int-long-">getServerName</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;hostName,
              int&nbsp;port,
@@ -322,7 +326,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 </div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>static <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/ServerName.html#getServerName-java.lang.String-long-">getServerName</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;hostAndPort,
              long&nbsp;startcode)</code>
@@ -331,7 +335,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 </div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>static <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/ServerName.html#getServerNameLessStartCode-java.lang.String-">getServerNameLessStartCode</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;inServerName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -339,7 +343,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 </div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>static long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#getServerStartcodeFromServerName-java.lang.String-">getServerStartcodeFromServerName</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;serverName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -347,28 +351,28 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 </div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#getStartcode--">getStartcode</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#getVersionedBytes--">getVersionedBytes</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#hashCode--">hashCode</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#isFullServerName-java.lang.String-">isFullServerName</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;str)</code>&nbsp;</td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#isSameAddress-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.ServerName-">isSameAddress</a></span>(<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;left,
              <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;right)</code>&nbsp;</td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>static <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/ServerName.html#parseHostname-java.lang.String-">parseHostname</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;serverName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -376,7 +380,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 </div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#parsePort-java.lang.String-">parsePort</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;serverName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -384,11 +388,11 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 </div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#parseServerName-java.lang.String-">parseServerName</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;str)</code>&nbsp;</td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code>static long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#parseStartcode-java.lang.String-">parseStartcode</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;serverName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -396,28 +400,28 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 </div>
 </td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#parseVersionedServerName-byte:A-">parseVersionedServerName</a></span>(byte[]&nbsp;versionedBytes)</code>
 <div class="block">Use this method instantiating a <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase"><code>ServerName</code></a> from bytes
  gotten from a call to <a href="../../../../org/apache/hadoop/hbase/ServerName.html#getVersionedBytes--"><code>getVersionedBytes()</code></a>.</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i23" 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/ServerName.html#toShortString--">toShortString</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" 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/ServerName.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#valueOf-java.lang.String-">valueOf</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;serverName)</code>
 <div class="block">Retrieve an instance of ServerName.</div>
 </td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#valueOf-java.lang.String-int-long-">valueOf</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;hostname,
        int&nbsp;port,
@@ -425,7 +429,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <div class="block">Retrieve an instance of ServerName.</div>
 </td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#valueOf-java.lang.String-long-">valueOf</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;hostAndPort,
        long&nbsp;startCode)</code>
@@ -801,13 +805,22 @@ public static&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hba
 <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/ServerName.html#line.232">getHostname</a>()</pre>
 </li>
 </ul>
+<a name="getHostnameLowerCase--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getHostnameLowerCase</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/ServerName.html#line.236">getHostnameLowerCase</a>()</pre>
+</li>
+</ul>
 <a name="getPort--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getPort</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.236">getPort</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.240">getPort</a>()</pre>
 </li>
 </ul>
 <a name="getStartcode--">
@@ -816,7 +829,7 @@ public static&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartcode</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.240">getStartcode</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.244">getStartcode</a>()</pre>
 </li>
 </ul>
 <a name="getServerName-java.lang.String-int-long-">
@@ -826,7 +839,7 @@ public static&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hba
 <li class="blockList">
 <h4>getServerName</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>
-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/ServerName.html#line.255">getServerName</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;hostName,
+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/ServerName.html#line.259">getServerName</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;hostName,
                                         int&nbsp;port,
                                         long&nbsp;startcode)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Since 2.0. Use <a href="../../../../org/apache/hadoop/hbase/ServerName.html#valueOf-java.lang.String-int-long-"><code>valueOf(String, int, long)</code></a> instead.</span></div>
@@ -849,7 +862,7 @@ static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <li class="blockList">
 <h4>getServerName</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;<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/ServerName.html#line.273">getServerName</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;hostAndPort,
+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/ServerName.html#line.277">getServerName</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;hostAndPort,
                                                long&nbsp;startcode)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Since 2.0. Use <a href="../../../../org/apache/hadoop/hbase/ServerName.html#valueOf-java.lang.String-long-"><code>valueOf(String, long)</code></a> instead.</span></div>
 <dl>
@@ -869,7 +882,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <li class="blockList">
 <h4>getHostAndPort</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="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/ServerName.html#line.287">getHostAndPort</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/ServerName.html#line.291">getHostAndPort</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Since 2.0. Use <a href="../../../../org/apache/hadoop/hbase/ServerName.html#getAddress--"><code>getAddress()</code></a> instead.</span></div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -884,7 +897,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>getAddress</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.291">getAddress</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.295">getAddress</a>()</pre>
 </li>
 </ul>
 <a name="getServerStartcodeFromServerName-java.lang.String-">
@@ -894,7 +907,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <li class="blockList">
 <h4>getServerStartcodeFromServerName</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;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.301">getServerStartcodeFromServerName</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;serverName)</pre>
+public static&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.305">getServerStartcodeFromServerName</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;serverName)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Since 2.0. Use instance of ServerName to pull out start code.</span></div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -911,7 +924,7 @@ public static&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hba
 <li class="blockList">
 <h4>getServerNameLessStartCode</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;<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/ServerName.html#line.313">getServerNameLessStartCode</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;inServerName)</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/ServerName.html#line.317">getServerNameLessStartCode</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;inServerName)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Since 2.0. Use <a href="../../../../org/apache/hadoop/hbase/ServerName.html#getAddress--"><code>getAddress()</code></a></span></div>
 <div class="block">Utility method to excise the start code from a server name</div>
 <dl>
@@ -928,7 +941,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.324">compareTo</a>(<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;other)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.328">compareTo</a>(<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;other)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true#compareTo-T-" title="class or interface in java.lang">compareTo</a></code>&nbsp;in interface&nbsp;<code><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;<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></dd>
@@ -941,7 +954,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.350">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.354">hashCode</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a></code>&nbsp;in class&nbsp;<code><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></code></dd>
@@ -954,7 +967,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.355">equals</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>&nbsp;o)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.359">equals</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>&nbsp;o)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a></code>&nbsp;in class&nbsp;<code><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></code></dd>
@@ -967,7 +980,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>isSameAddress</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.367">isSameAddress</a>(<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;left,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.371">isSameAddress</a>(<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;left,
                                     <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;right)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -984,7 +997,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>parseVersionedServerName</h4>
-<pre>public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.384">parseVersionedServerName</a>(byte[]&nbsp;versionedBytes)</pre>
+<pre>public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.388">parseVersionedServerName</a>(byte[]&nbsp;versionedBytes)</pre>
 <div class="block">Use this method instantiating a <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase"><code>ServerName</code></a> from bytes
  gotten from a call to <a href="../../../../org/apache/hadoop/hbase/ServerName.html#getVersionedBytes--"><code>getVersionedBytes()</code></a>.  Will take care of the
  case where bytes were written by an earlier version of hbase.</div>
@@ -1004,7 +1017,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>parseServerName</h4>
-<pre>public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.401">parseServerName</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;str)</pre>
+<pre>public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.405">parseServerName</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;str)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>str</code> - Either an instance of <a href="../../../../org/apache/hadoop/hbase/ServerName.html#toString--"><code>toString()</code></a> or a
@@ -1020,7 +1033,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isFullServerName</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.411">isFullServerName</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;str)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.415">isFullServerName</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;str)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if the String follows the pattern of <a href="../../../../org/apache/hadoop/hbase/ServerName.html#toString--"><code>toString()</code></a>, false

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/SizeCachedKeyValue.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/SizeCachedKeyValue.html b/devapidocs/org/apache/hadoop/hbase/SizeCachedKeyValue.html
index 0196d47..11af761 100644
--- a/devapidocs/org/apache/hadoop/hbase/SizeCachedKeyValue.html
+++ b/devapidocs/org/apache/hadoop/hbase/SizeCachedKeyValue.html
@@ -268,7 +268,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/KeyValue.html" title="class
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/SizeCachedNoTagsKeyValue.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/SizeCachedNoTagsKeyValue.html b/devapidocs/org/apache/hadoop/hbase/SizeCachedNoTagsKeyValue.html
index 8e06d4f..9fe60c9 100644
--- a/devapidocs/org/apache/hadoop/hbase/SizeCachedNoTagsKeyValue.html
+++ b/devapidocs/org/apache/hadoop/hbase/SizeCachedNoTagsKeyValue.html
@@ -255,7 +255,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/SizeCachedKeyValue.html" ti
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 52c7f71..3940013 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -167,10 +167,10 @@
 <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/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/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>
+<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>
 </ul>
 </li>
 </ul>


[16/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html
index 85373ba..d253aa8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html
@@ -41,208 +41,208 @@
 <span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.CoprocessorEnvironment;<a name="line.33"></a>
 <span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HConstants;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.ServerName;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.TableName;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.SnapshotDescription;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.constraint.ConstraintException;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.coprocessor.CoreCoprocessor;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.coprocessor.HasMasterServices;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessor;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.coprocessor.MasterObserver;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.coprocessor.ObserverContext;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.net.Address;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.AddRSGroupRequest;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.AddRSGroupResponse;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.BalanceRSGroupRequest;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.BalanceRSGroupResponse;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfServerRequest;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfServerResponse;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfTableRequest;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfTableResponse;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoRequest;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoResponse;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.ListRSGroupInfosRequest;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.ListRSGroupInfosResponse;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersAndTablesRequest;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersAndTablesResponse;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersRequest;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersResponse;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveTablesRequest;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveTablesResponse;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdminService;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveRSGroupRequest;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveRSGroupResponse;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveServersRequest;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveServersResponse;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.security.User;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.security.access.AccessChecker;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.security.access.Permission.Action;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.slf4j.Logger;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.slf4j.LoggerFactory;<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.88"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ServerName;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.TableName;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.SnapshotDescription;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.constraint.ConstraintException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.coprocessor.CoreCoprocessor;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.coprocessor.HasMasterServices;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessor;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.coprocessor.MasterObserver;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.coprocessor.ObserverContext;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.net.Address;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.AddRSGroupRequest;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.AddRSGroupResponse;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.BalanceRSGroupRequest;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.BalanceRSGroupResponse;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfServerRequest;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfServerResponse;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfTableRequest;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfTableResponse;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoRequest;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoResponse;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.ListRSGroupInfosRequest;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.ListRSGroupInfosResponse;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersAndTablesRequest;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersAndTablesResponse;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersRequest;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersResponse;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveTablesRequest;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveTablesResponse;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdminService;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveRSGroupRequest;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveRSGroupResponse;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveServersRequest;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveServersResponse;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.security.User;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.security.access.AccessChecker;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.security.access.Permission.Action;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.slf4j.Logger;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.slf4j.LoggerFactory;<a name="line.88"></a>
 <span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>// TODO: Encapsulate MasterObserver functions into separate subclass.<a name="line.90"></a>
-<span class="sourceLineNo">091</span>@CoreCoprocessor<a name="line.91"></a>
-<span class="sourceLineNo">092</span>@InterfaceAudience.Private<a name="line.92"></a>
-<span class="sourceLineNo">093</span>public class RSGroupAdminEndpoint implements MasterCoprocessor, MasterObserver {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  private static final Logger LOG = LoggerFactory.getLogger(RSGroupAdminEndpoint.class);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  private MasterServices master = null;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  // Only instance of RSGroupInfoManager. RSGroup aware load balancers ask for this instance on<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  // their setup.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private RSGroupInfoManager groupInfoManager;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  private RSGroupAdminServer groupAdminServer;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private final RSGroupAdminService groupAdminService = new RSGroupAdminServiceImpl();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private AccessChecker accessChecker;<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  /** Provider for mapping principal names to Users */<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  private UserProvider userProvider;<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  @Override<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  public void start(CoprocessorEnvironment env) throws IOException {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    if (!(env instanceof HasMasterServices)) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      throw new IOException("Does not implement HMasterServices");<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>    master = ((HasMasterServices)env).getMasterServices();<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    groupInfoManager = RSGroupInfoManagerImpl.getInstance(master);<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    groupAdminServer = new RSGroupAdminServer(master, groupInfoManager);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    Class&lt;?&gt; clazz =<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        master.getConfiguration().getClass(HConstants.HBASE_MASTER_LOADBALANCER_CLASS, null);<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    if (!RSGroupableBalancer.class.isAssignableFrom(clazz)) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      throw new IOException("Configured balancer does not support RegionServer groups.");<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    ZKWatcher zk = ((HasMasterServices)env).getMasterServices().getZooKeeper();<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    accessChecker = new AccessChecker(env.getConfiguration(), zk);<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>    // set the user-provider.<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    this.userProvider = UserProvider.instantiate(env.getConfiguration());<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>  @Override<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  public void stop(CoprocessorEnvironment env) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    accessChecker.stop();<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>  @Override<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  public Iterable&lt;Service&gt; getServices() {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    return Collections.singleton(groupAdminService);<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>  @Override<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  public Optional&lt;MasterObserver&gt; getMasterObserver() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    return Optional.of(this);<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>  RSGroupInfoManager getGroupInfoManager() {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    return groupInfoManager;<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>  /**<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * Implementation of RSGroupAdminService defined in RSGroupAdmin.proto.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * This class calls {@link RSGroupAdminServer} for actual work, converts result to protocol<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * buffer response, handles exceptions if any occurred and then calls the {@code RpcCallback} with<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * the response.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  private class RSGroupAdminServiceImpl extends RSGroupAdminProtos.RSGroupAdminService {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public void getRSGroupInfo(RpcController controller,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        GetRSGroupInfoRequest request, RpcCallback&lt;GetRSGroupInfoResponse&gt; done) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      GetRSGroupInfoResponse.Builder builder = GetRSGroupInfoResponse.newBuilder();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      String groupName = request.getRSGroupName();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      LOG.info(master.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, group="<a name="line.159"></a>
-<span class="sourceLineNo">160</span>              + groupName);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      try {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        checkPermission("getRSGroupInfo");<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        RSGroupInfo rsGroupInfo = groupAdminServer.getRSGroupInfo(groupName);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        if (rsGroupInfo != null) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>          builder.setRSGroupInfo(RSGroupProtobufUtil.toProtoGroupInfo(rsGroupInfo));<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      } catch (IOException e) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      done.run(builder.build());<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>    @Override<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    public void getRSGroupInfoOfTable(RpcController controller,<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        GetRSGroupInfoOfTableRequest request, RpcCallback&lt;GetRSGroupInfoOfTableResponse&gt; done) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      GetRSGroupInfoOfTableResponse.Builder builder = GetRSGroupInfoOfTableResponse.newBuilder();<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      LOG.info(master.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, table="<a name="line.178"></a>
-<span class="sourceLineNo">179</span>          + tableName);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      try {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        checkPermission("getRSGroupInfoOfTable");<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        RSGroupInfo RSGroupInfo = groupAdminServer.getRSGroupInfoOfTable(tableName);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        if (RSGroupInfo != null) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          builder.setRSGroupInfo(RSGroupProtobufUtil.toProtoGroupInfo(RSGroupInfo));<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      } catch (IOException e) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      done.run(builder.build());<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 void moveServers(RpcController controller, MoveServersRequest request,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        RpcCallback&lt;MoveServersResponse&gt; done) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      MoveServersResponse.Builder builder = MoveServersResponse.newBuilder();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      Set&lt;Address&gt; hostPorts = Sets.newHashSet();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      for (HBaseProtos.ServerName el : request.getServersList()) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        hostPorts.add(Address.fromParts(el.getHostName(), el.getPort()));<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      LOG.info(master.getClientIdAuditPrefix() + " move servers " + hostPorts +" to rsgroup "<a name="line.200"></a>
-<span class="sourceLineNo">201</span>          + request.getTargetGroup());<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      try {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        checkPermission("moveServers");<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        groupAdminServer.moveServers(hostPorts, request.getTargetGroup());<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      } catch (IOException e) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      done.run(builder.build());<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>    @Override<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    public void moveTables(RpcController controller, MoveTablesRequest request,<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        RpcCallback&lt;MoveTablesResponse&gt; done) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      MoveTablesResponse.Builder builder = MoveTablesResponse.newBuilder();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      Set&lt;TableName&gt; tables = new HashSet&lt;&gt;(request.getTableNameList().size());<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      for (HBaseProtos.TableName tableName : request.getTableNameList()) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        tables.add(ProtobufUtil.toTableName(tableName));<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      LOG.info(master.getClientIdAuditPrefix() + " move tables " + tables +" to rsgroup "<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          + request.getTargetGroup());<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      try {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        checkPermission("moveTables");<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        groupAdminServer.moveTables(tables, request.getTargetGroup());<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      } catch (IOException e) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.225"></a>
+<span class="sourceLineNo">090</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>// TODO: Encapsulate MasterObserver functions into separate subclass.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>@CoreCoprocessor<a name="line.93"></a>
+<span class="sourceLineNo">094</span>@InterfaceAudience.Private<a name="line.94"></a>
+<span class="sourceLineNo">095</span>public class RSGroupAdminEndpoint implements MasterCoprocessor, MasterObserver {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private static final Logger LOG = LoggerFactory.getLogger(RSGroupAdminEndpoint.class);<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private MasterServices master = null;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  // Only instance of RSGroupInfoManager. RSGroup aware load balancers ask for this instance on<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  // their setup.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  private RSGroupInfoManager groupInfoManager;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private RSGroupAdminServer groupAdminServer;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  private final RSGroupAdminService groupAdminService = new RSGroupAdminServiceImpl();<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  private AccessChecker accessChecker;<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  /** Provider for mapping principal names to Users */<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  private UserProvider userProvider;<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 void start(CoprocessorEnvironment env) throws IOException {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    if (!(env instanceof HasMasterServices)) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      throw new IOException("Does not implement HMasterServices");<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>    master = ((HasMasterServices)env).getMasterServices();<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    groupInfoManager = RSGroupInfoManagerImpl.getInstance(master);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    groupAdminServer = new RSGroupAdminServer(master, groupInfoManager);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    Class&lt;?&gt; clazz =<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        master.getConfiguration().getClass(HConstants.HBASE_MASTER_LOADBALANCER_CLASS, null);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    if (!RSGroupableBalancer.class.isAssignableFrom(clazz)) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      throw new IOException("Configured balancer does not support RegionServer groups.");<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    }<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    ZKWatcher zk = ((HasMasterServices)env).getMasterServices().getZooKeeper();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    accessChecker = new AccessChecker(env.getConfiguration(), zk);<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>    // set the user-provider.<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    this.userProvider = UserProvider.instantiate(env.getConfiguration());<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>  @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public void stop(CoprocessorEnvironment env) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    accessChecker.stop();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  }<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  @Override<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  public Iterable&lt;Service&gt; getServices() {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    return Collections.singleton(groupAdminService);<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>  @Override<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  public Optional&lt;MasterObserver&gt; getMasterObserver() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    return Optional.of(this);<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>
+<span class="sourceLineNo">145</span>  RSGroupInfoManager getGroupInfoManager() {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    return groupInfoManager;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  }<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  /**<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * Implementation of RSGroupAdminService defined in RSGroupAdmin.proto.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * This class calls {@link RSGroupAdminServer} for actual work, converts result to protocol<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * buffer response, handles exceptions if any occurred and then calls the {@code RpcCallback} with<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * the response.<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  private class RSGroupAdminServiceImpl extends RSGroupAdminProtos.RSGroupAdminService {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    @Override<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public void getRSGroupInfo(RpcController controller,<a name="line.157"></a>
+<span class="sourceLineNo">158</span>        GetRSGroupInfoRequest request, RpcCallback&lt;GetRSGroupInfoResponse&gt; done) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      GetRSGroupInfoResponse.Builder builder = GetRSGroupInfoResponse.newBuilder();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      String groupName = request.getRSGroupName();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      LOG.info(master.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, group="<a name="line.161"></a>
+<span class="sourceLineNo">162</span>              + groupName);<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      try {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        checkPermission("getRSGroupInfo");<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        RSGroupInfo rsGroupInfo = groupAdminServer.getRSGroupInfo(groupName);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        if (rsGroupInfo != null) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>          builder.setRSGroupInfo(RSGroupProtobufUtil.toProtoGroupInfo(rsGroupInfo));<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      } catch (IOException e) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      done.run(builder.build());<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 void getRSGroupInfoOfTable(RpcController controller,<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        GetRSGroupInfoOfTableRequest request, RpcCallback&lt;GetRSGroupInfoOfTableResponse&gt; done) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      GetRSGroupInfoOfTableResponse.Builder builder = GetRSGroupInfoOfTableResponse.newBuilder();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      LOG.info(master.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, table="<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          + tableName);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      try {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        checkPermission("getRSGroupInfoOfTable");<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        RSGroupInfo RSGroupInfo = groupAdminServer.getRSGroupInfoOfTable(tableName);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        if (RSGroupInfo != null) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>          builder.setRSGroupInfo(RSGroupProtobufUtil.toProtoGroupInfo(RSGroupInfo));<a name="line.186"></a>
+<span class="sourceLineNo">187</span>        }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      } catch (IOException e) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      }<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      done.run(builder.build());<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 void moveServers(RpcController controller, MoveServersRequest request,<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        RpcCallback&lt;MoveServersResponse&gt; done) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      MoveServersResponse.Builder builder = MoveServersResponse.newBuilder();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      Set&lt;Address&gt; hostPorts = Sets.newHashSet();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      for (HBaseProtos.ServerName el : request.getServersList()) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        hostPorts.add(Address.fromParts(el.getHostName(), el.getPort()));<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      LOG.info(master.getClientIdAuditPrefix() + " move servers " + hostPorts +" to rsgroup "<a name="line.202"></a>
+<span class="sourceLineNo">203</span>          + request.getTargetGroup());<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      try {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>          master.getMasterCoprocessorHost().preMoveServers(hostPorts, request.getTargetGroup());<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        checkPermission("moveServers");<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        groupAdminServer.moveServers(hostPorts, request.getTargetGroup());<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          master.getMasterCoprocessorHost().postMoveServers(hostPorts, request.getTargetGroup());<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      } catch (IOException e) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      done.run(builder.build());<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>    @Override<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    public void moveTables(RpcController controller, MoveTablesRequest request,<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        RpcCallback&lt;MoveTablesResponse&gt; done) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      MoveTablesResponse.Builder builder = MoveTablesResponse.newBuilder();<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      Set&lt;TableName&gt; tables = new HashSet&lt;&gt;(request.getTableNameList().size());<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      for (HBaseProtos.TableName tableName : request.getTableNameList()) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        tables.add(ProtobufUtil.toTableName(tableName));<a name="line.225"></a>
 <span class="sourceLineNo">226</span>      }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      done.run(builder.build());<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>    @Override<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void addRSGroup(RpcController controller, AddRSGroupRequest request,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        RpcCallback&lt;AddRSGroupResponse&gt; done) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      AddRSGroupResponse.Builder builder = AddRSGroupResponse.newBuilder();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      LOG.info(master.getClientIdAuditPrefix() + " add rsgroup " + request.getRSGroupName());<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      try {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        checkPermission("addRSGroup");<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        groupAdminServer.addRSGroup(request.getRSGroupName());<a name="line.237"></a>
+<span class="sourceLineNo">227</span>      LOG.info(master.getClientIdAuditPrefix() + " move tables " + tables +" to rsgroup "<a name="line.227"></a>
+<span class="sourceLineNo">228</span>          + request.getTargetGroup());<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      try {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>          master.getMasterCoprocessorHost().preMoveTables(tables, request.getTargetGroup());<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        checkPermission("moveTables");<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        groupAdminServer.moveTables(tables, request.getTargetGroup());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>          master.getMasterCoprocessorHost().postMoveTables(tables, request.getTargetGroup());<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        }<a name="line.237"></a>
 <span class="sourceLineNo">238</span>      } catch (IOException e) {<a name="line.238"></a>
 <span class="sourceLineNo">239</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.239"></a>
 <span class="sourceLineNo">240</span>      }<a name="line.240"></a>
@@ -250,244 +250,300 @@
 <span class="sourceLineNo">242</span>    }<a name="line.242"></a>
 <span class="sourceLineNo">243</span><a name="line.243"></a>
 <span class="sourceLineNo">244</span>    @Override<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    public void removeRSGroup(RpcController controller,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        RemoveRSGroupRequest request, RpcCallback&lt;RemoveRSGroupResponse&gt; done) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      RemoveRSGroupResponse.Builder builder =<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          RemoveRSGroupResponse.newBuilder();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      LOG.info(master.getClientIdAuditPrefix() + " remove rsgroup " + request.getRSGroupName());<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      try {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        checkPermission("removeRSGroup");<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        groupAdminServer.removeRSGroup(request.getRSGroupName());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      } catch (IOException e) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      done.run(builder.build());<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>    @Override<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    public void balanceRSGroup(RpcController controller,<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        BalanceRSGroupRequest request, RpcCallback&lt;BalanceRSGroupResponse&gt; done) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      BalanceRSGroupResponse.Builder builder = BalanceRSGroupResponse.newBuilder();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      LOG.info(master.getClientIdAuditPrefix() + " balance rsgroup, group=" +<a name="line.263"></a>
-<span class="sourceLineNo">264</span>              request.getRSGroupName());<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      try {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>        checkPermission("balanceRSGroup");<a name="line.266"></a>
-<span class="sourceLineNo">267</span>        builder.setBalanceRan(groupAdminServer.balanceRSGroup(request.getRSGroupName()));<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      } catch (IOException e) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        builder.setBalanceRan(false);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      done.run(builder.build());<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>    public void listRSGroupInfos(RpcController controller,<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        ListRSGroupInfosRequest request, RpcCallback&lt;ListRSGroupInfosResponse&gt; done) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      ListRSGroupInfosResponse.Builder builder = ListRSGroupInfosResponse.newBuilder();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      LOG.info(master.getClientIdAuditPrefix() + " list rsgroup");<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      try {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        checkPermission("listRSGroup");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        for (RSGroupInfo RSGroupInfo : groupAdminServer.listRSGroups()) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>          builder.addRSGroupInfo(RSGroupProtobufUtil.toProtoGroupInfo(RSGroupInfo));<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        }<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      } catch (IOException e) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      done.run(builder.build());<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 void getRSGroupInfoOfServer(RpcController controller,<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        GetRSGroupInfoOfServerRequest request, RpcCallback&lt;GetRSGroupInfoOfServerResponse&gt; done) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      GetRSGroupInfoOfServerResponse.Builder builder = GetRSGroupInfoOfServerResponse.newBuilder();<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      Address hp = Address.fromParts(request.getServer().getHostName(),<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          request.getServer().getPort());<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      LOG.info(master.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, server="<a name="line.297"></a>
-<span class="sourceLineNo">298</span>          + hp);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      try {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        checkPermission("getRSGroupInfoOfServer");<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        RSGroupInfo RSGroupInfo = groupAdminServer.getRSGroupOfServer(hp);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        if (RSGroupInfo != null) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          builder.setRSGroupInfo(RSGroupProtobufUtil.toProtoGroupInfo(RSGroupInfo));<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      } catch (IOException e) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      done.run(builder.build());<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 void moveServersAndTables(RpcController controller,<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        MoveServersAndTablesRequest request, RpcCallback&lt;MoveServersAndTablesResponse&gt; done) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      MoveServersAndTablesResponse.Builder builder = MoveServersAndTablesResponse.newBuilder();<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      Set&lt;Address&gt; hostPorts = Sets.newHashSet();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      for (HBaseProtos.ServerName el : request.getServersList()) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        hostPorts.add(Address.fromParts(el.getHostName(), el.getPort()));<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      Set&lt;TableName&gt; tables = new HashSet&lt;&gt;(request.getTableNameList().size());<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      for (HBaseProtos.TableName tableName : request.getTableNameList()) {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        tables.add(ProtobufUtil.toTableName(tableName));<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      LOG.info(master.getClientIdAuditPrefix() + " move servers " + hostPorts<a name="line.323"></a>
-<span class="sourceLineNo">324</span>          + " and tables " + tables + " to rsgroup" + request.getTargetGroup());<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      try {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>        checkPermission("moveServersAndTables");<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        groupAdminServer.moveServersAndTables(hostPorts, tables, request.getTargetGroup());<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      } catch (IOException e) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      done.run(builder.build());<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 void removeServers(RpcController controller,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        RemoveServersRequest request,<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        RpcCallback&lt;RemoveServersResponse&gt; done) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      RemoveServersResponse.Builder builder =<a name="line.338"></a>
-<span class="sourceLineNo">339</span>          RemoveServersResponse.newBuilder();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      Set&lt;Address&gt; servers = Sets.newHashSet();<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      for (HBaseProtos.ServerName el : request.getServersList()) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        servers.add(Address.fromParts(el.getHostName(), el.getPort()));<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      LOG.info(master.getClientIdAuditPrefix()<a name="line.344"></a>
-<span class="sourceLineNo">345</span>          + " remove decommissioned servers from rsgroup: " + servers);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      try {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        checkPermission("removeServers");<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        groupAdminServer.removeServers(servers);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      } catch (IOException e) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      done.run(builder.build());<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    }<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>  boolean rsgroupHasServersOnline(TableDescriptor desc) throws IOException {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    String groupName =<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        master.getClusterSchema().getNamespace(desc.getTableName().getNamespaceAsString())<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        .getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    if (groupName == null) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      groupName = RSGroupInfo.DEFAULT_GROUP;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    RSGroupInfo rsGroupInfo = groupAdminServer.getRSGroupInfo(groupName);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    if (rsGroupInfo == null) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      throw new ConstraintException(<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          "Default RSGroup (" + groupName + ") for this table's " + "namespace does not exist.");<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>    for (ServerName onlineServer : master.getServerManager().createDestinationServersList()) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      if (rsGroupInfo.getServers().contains(onlineServer.getAddress())) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        return true;<a name="line.371"></a>
+<span class="sourceLineNo">245</span>    public void addRSGroup(RpcController controller, AddRSGroupRequest request,<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        RpcCallback&lt;AddRSGroupResponse&gt; done) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      AddRSGroupResponse.Builder builder = AddRSGroupResponse.newBuilder();<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      LOG.info(master.getClientIdAuditPrefix() + " add rsgroup " + request.getRSGroupName());<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      try {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          master.getMasterCoprocessorHost().preAddRSGroup(request.getRSGroupName());<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        checkPermission("addRSGroup");<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        groupAdminServer.addRSGroup(request.getRSGroupName());<a name="line.254"></a>
+<span class="sourceLineNo">255</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          master.getMasterCoprocessorHost().postAddRSGroup(request.getRSGroupName());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      } catch (IOException e) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      done.run(builder.build());<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 void removeRSGroup(RpcController controller,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        RemoveRSGroupRequest request, RpcCallback&lt;RemoveRSGroupResponse&gt; done) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      RemoveRSGroupResponse.Builder builder =<a name="line.267"></a>
+<span class="sourceLineNo">268</span>          RemoveRSGroupResponse.newBuilder();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      LOG.info(master.getClientIdAuditPrefix() + " remove rsgroup " + request.getRSGroupName());<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      try {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          master.getMasterCoprocessorHost().preRemoveRSGroup(request.getRSGroupName());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        checkPermission("removeRSGroup");<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        groupAdminServer.removeRSGroup(request.getRSGroupName());<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>          master.getMasterCoprocessorHost().postRemoveRSGroup(request.getRSGroupName());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        }<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      } catch (IOException e) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      done.run(builder.build());<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 void balanceRSGroup(RpcController controller,<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        BalanceRSGroupRequest request, RpcCallback&lt;BalanceRSGroupResponse&gt; done) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      BalanceRSGroupResponse.Builder builder = BalanceRSGroupResponse.newBuilder();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      LOG.info(master.getClientIdAuditPrefix() + " balance rsgroup, group=" +<a name="line.289"></a>
+<span class="sourceLineNo">290</span>              request.getRSGroupName());<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      try {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>          master.getMasterCoprocessorHost().preBalanceRSGroup(request.getRSGroupName());<a name="line.293"></a>
+<span class="sourceLineNo">294</span>        }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        checkPermission("balanceRSGroup");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        boolean balancerRan = groupAdminServer.balanceRSGroup(request.getRSGroupName());<a name="line.296"></a>
+<span class="sourceLineNo">297</span>        builder.setBalanceRan(balancerRan);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>          master.getMasterCoprocessorHost().postBalanceRSGroup(request.getRSGroupName(),<a name="line.299"></a>
+<span class="sourceLineNo">300</span>              balancerRan);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        }<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      } catch (IOException e) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        builder.setBalanceRan(false);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      done.run(builder.build());<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>    @Override<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    public void listRSGroupInfos(RpcController controller,<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        ListRSGroupInfosRequest request, RpcCallback&lt;ListRSGroupInfosResponse&gt; done) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      ListRSGroupInfosResponse.Builder builder = ListRSGroupInfosResponse.newBuilder();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      LOG.info(master.getClientIdAuditPrefix() + " list rsgroup");<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      try {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        checkPermission("listRSGroup");<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        for (RSGroupInfo RSGroupInfo : groupAdminServer.listRSGroups()) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          builder.addRSGroupInfo(RSGroupProtobufUtil.toProtoGroupInfo(RSGroupInfo));<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      } catch (IOException e) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      done.run(builder.build());<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>    @Override<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    public void getRSGroupInfoOfServer(RpcController controller,<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        GetRSGroupInfoOfServerRequest request, RpcCallback&lt;GetRSGroupInfoOfServerResponse&gt; done) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      GetRSGroupInfoOfServerResponse.Builder builder = GetRSGroupInfoOfServerResponse.newBuilder();<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      Address hp = Address.fromParts(request.getServer().getHostName(),<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          request.getServer().getPort());<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      LOG.info(master.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, server="<a name="line.331"></a>
+<span class="sourceLineNo">332</span>          + hp);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      try {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        checkPermission("getRSGroupInfoOfServer");<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        RSGroupInfo info = groupAdminServer.getRSGroupOfServer(hp);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        if (info != null) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>          builder.setRSGroupInfo(RSGroupProtobufUtil.toProtoGroupInfo(info));<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      } catch (IOException e) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      }<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      done.run(builder.build());<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 void moveServersAndTables(RpcController controller,<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        MoveServersAndTablesRequest request, RpcCallback&lt;MoveServersAndTablesResponse&gt; done) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      MoveServersAndTablesResponse.Builder builder = MoveServersAndTablesResponse.newBuilder();<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      Set&lt;Address&gt; hostPorts = Sets.newHashSet();<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      for (HBaseProtos.ServerName el : request.getServersList()) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>        hostPorts.add(Address.fromParts(el.getHostName(), el.getPort()));<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      Set&lt;TableName&gt; tables = new HashSet&lt;&gt;(request.getTableNameList().size());<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      for (HBaseProtos.TableName tableName : request.getTableNameList()) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        tables.add(ProtobufUtil.toTableName(tableName));<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      LOG.info(master.getClientIdAuditPrefix() + " move servers " + hostPorts<a name="line.357"></a>
+<span class="sourceLineNo">358</span>          + " and tables " + tables + " to rsgroup" + request.getTargetGroup());<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      try {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>          master.getMasterCoprocessorHost().preMoveServersAndTables(hostPorts, tables,<a name="line.361"></a>
+<span class="sourceLineNo">362</span>              request.getTargetGroup());<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        }<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        checkPermission("moveServersAndTables");<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        groupAdminServer.moveServersAndTables(hostPorts, tables, request.getTargetGroup());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>          master.getMasterCoprocessorHost().postMoveServersAndTables(hostPorts, tables,<a name="line.367"></a>
+<span class="sourceLineNo">368</span>              request.getTargetGroup());<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        }<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      } catch (IOException e) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        CoprocessorRpcUtils.setControllerException(controller, e);<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>    return false;<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>  void assignTableToGroup(TableDescriptor desc) throws IOException {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    String groupName =<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        master.getClusterSchema().getNamespace(desc.getTableName().getNamespaceAsString())<a name="line.379"></a>
-<span class="sourceLineNo">380</span>                .getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    if (groupName == null) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      groupName = RSGroupInfo.DEFAULT_GROUP;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    RSGroupInfo rsGroupInfo = groupAdminServer.getRSGroupInfo(groupName);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    if (rsGroupInfo == null) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      throw new ConstraintException("Default RSGroup (" + groupName + ") for this table's "<a name="line.386"></a>
-<span class="sourceLineNo">387</span>          + "namespace does not exist.");<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    if (!rsGroupInfo.containsTable(desc.getTableName())) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      LOG.debug("Pre-moving table " + desc.getTableName() + " to RSGroup " + groupName);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      groupAdminServer.moveTables(Sets.newHashSet(desc.getTableName()), groupName);<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><a name="line.394"></a>
-<span class="sourceLineNo">395</span>  /////////////////////////////////////////////////////////////////////////////<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  // MasterObserver overrides<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  /////////////////////////////////////////////////////////////////////////////<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>  @Override<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  public void preCreateTableAction(<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      final TableDescriptor desc,<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      final RegionInfo[] regions) throws IOException {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    if (!desc.getTableName().isSystemTable() &amp;&amp; !rsgroupHasServersOnline(desc)) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      throw new HBaseIOException("No online servers in the rsgroup, which table " +<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          desc.getTableName().getNameAsString() + " belongs to");<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    }<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>  // Assign table to default RSGroup.<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  @Override<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  public void postCreateTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      TableDescriptor desc, RegionInfo[] regions) throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    assignTableToGroup(desc);<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>  // Remove table from its RSGroup.<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  @Override<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  public void postDeleteTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.419"></a>
-<span class="sourceLineNo">420</span>                              TableName tableName) throws IOException {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      RSGroupInfo group = groupAdminServer.getRSGroupInfoOfTable(tableName);<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      if (group != null) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        LOG.debug(String.format("Removing deleted table '%s' from rsgroup '%s'", tableName,<a name="line.424"></a>
-<span class="sourceLineNo">425</span>            group.getName()));<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        groupAdminServer.moveTables(Sets.newHashSet(tableName), null);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      }<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    } catch (IOException ex) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      LOG.debug("Failed to perform RSGroup information cleanup for table: " + tableName, ex);<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
+<span class="sourceLineNo">373</span>      done.run(builder.build());<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>    @Override<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    public void removeServers(RpcController controller,<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        RemoveServersRequest request,<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        RpcCallback&lt;RemoveServersResponse&gt; done) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      RemoveServersResponse.Builder builder =<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          RemoveServersResponse.newBuilder();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      Set&lt;Address&gt; servers = Sets.newHashSet();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      for (HBaseProtos.ServerName el : request.getServersList()) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        servers.add(Address.fromParts(el.getHostName(), el.getPort()));<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      LOG.info(master.getClientIdAuditPrefix()<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          + " remove decommissioned servers from rsgroup: " + servers);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      try {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          master.getMasterCoprocessorHost().preRemoveServers(servers);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        }<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        checkPermission("removeServers");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        groupAdminServer.removeServers(servers);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>          master.getMasterCoprocessorHost().postRemoveServers(servers);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        }<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      } catch (IOException e) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      done.run(builder.build());<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  boolean rsgroupHasServersOnline(TableDescriptor desc) throws IOException {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    String groupName;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    try {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      groupName =<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        master.getClusterSchema().getNamespace(desc.getTableName().getNamespaceAsString())<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        .getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      if (groupName == null) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>        groupName = RSGroupInfo.DEFAULT_GROUP;<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      }<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    } catch (MasterNotRunningException | PleaseHoldException e) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      LOG.info("Master has not initialized yet; temporarily using default RSGroup '" +<a name="line.414"></a>
+<span class="sourceLineNo">415</span>          RSGroupInfo.DEFAULT_GROUP + "' for deploy of system table");<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      groupName = RSGroupInfo.DEFAULT_GROUP;<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
+<span class="sourceLineNo">418</span><a name="line.418"></a>
+<span class="sourceLineNo">419</span>    RSGroupInfo rsGroupInfo = groupAdminServer.getRSGroupInfo(groupName);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    if (rsGroupInfo == null) {<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      throw new ConstraintException(<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          "Default RSGroup (" + groupName + ") for this table's " + "namespace does not exist.");<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>    for (ServerName onlineServer : master.getServerManager().createDestinationServersList()) {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      if (rsGroupInfo.getServers().contains(onlineServer.getAddress())) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        return true;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    return false;<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 void preCreateNamespace(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>                                 NamespaceDescriptor ns) throws IOException {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    String group = ns.getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    if(group != null &amp;&amp; groupAdminServer.getRSGroupInfo(group) == null) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      throw new ConstraintException("Region server group "+group+" does not exit");<a name="line.438"></a>
+<span class="sourceLineNo">433</span>  void assignTableToGroup(TableDescriptor desc) throws IOException {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    String groupName =<a name="line.434"></a>
+<span class="sourceLineNo">435</span>        master.getClusterSchema().getNamespace(desc.getTableName().getNamespaceAsString())<a name="line.435"></a>
+<span class="sourceLineNo">436</span>                .getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    if (groupName == null) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      groupName = RSGroupInfo.DEFAULT_GROUP;<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>  @Override<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  public void preModifyNamespace(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      NamespaceDescriptor ns) throws IOException {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    preCreateNamespace(ctx, ns);<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>  @Override<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  public void preCloneSnapshot(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      SnapshotDescription snapshot, TableDescriptor desc) throws IOException {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    assignTableToGroup(desc);<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 void postClearDeadServers(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      List&lt;ServerName&gt; servers, List&lt;ServerName&gt; notClearedServers)<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      throws IOException {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    Set&lt;Address&gt; clearedServer = servers.stream().<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        filter(server -&gt; !notClearedServers.contains(server)).<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        map(ServerName::getAddress).<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        collect(Collectors.toSet());<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    groupAdminServer.removeServers(clearedServer);<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>  public void checkPermission(String request) throws IOException {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    accessChecker.requirePermission(getActiveUser(), request, Action.ADMIN);<a name="line.466"></a>
-<span class="sourceLineNo

<TRUNCATED>

[12/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html
index 54b1f96..ed95cbf 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html
@@ -31,922 +31,906 @@
 <span class="sourceLineNo">023</span>import java.io.ByteArrayInputStream;<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.ArrayList;<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.Collections;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.HashSet;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.LinkedList;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.List;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.Map;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.NavigableSet;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Set;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.SortedSet;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.TreeSet;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.Cell;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.Coprocessor;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.HConstants;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.MetaTableAccessor.DefaultVisitorBase;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.ServerName;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.client.Get;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.client.Put;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.client.Result;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.Table;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.constraint.ConstraintException;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.master.ServerListener;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.net.Address;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.protobuf.ProtobufMagic;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.protobuf.generated.MultiRowMutationProtos;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupProtos;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.quotas.QuotaTableUtil;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.security.access.AccessControlLists;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.zookeeper.KeeperException;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.slf4j.Logger;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.slf4j.LoggerFactory;<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<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> * This is an implementation of {@link RSGroupInfoManager} which makes<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * use of an HBase table as the persistence store for the group information.<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * It also makes use of zookeeper to store group information needed<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * for bootstrapping during offline mode.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> *<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * &lt;h2&gt;Concurrency&lt;/h2&gt;<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * RSGroup state is kept locally in Maps. There is a rsgroup name to cached<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * RSGroupInfo Map at {@link #rsGroupMap} and a Map of tables to the name of the<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * rsgroup they belong too (in {@link #tableMap}). These Maps are persisted to the<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * hbase:rsgroup table (and cached in zk) on each modification.<a name="line.104"></a>
-<span class="sourceLineNo">105</span> *<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * &lt;p&gt;Mutations on state are synchronized but reads can continue without having<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * to wait on an instance monitor, mutations do wholesale replace of the Maps on<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * update -- Copy-On-Write; the local Maps of state are read-only, just-in-case<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * (see flushConfig).<a name="line.109"></a>
-<span class="sourceLineNo">110</span> *<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * &lt;p&gt;Reads must not block else there is a danger we'll deadlock.<a name="line.111"></a>
-<span class="sourceLineNo">112</span> *<a name="line.112"></a>
-<span class="sourceLineNo">113</span> * &lt;p&gt;Clients of this class, the {@link RSGroupAdminEndpoint} for example, want to query and<a name="line.113"></a>
-<span class="sourceLineNo">114</span> * then act on the results of the query modifying cache in zookeeper without another thread<a name="line.114"></a>
-<span class="sourceLineNo">115</span> * making intermediate modifications. These clients synchronize on the 'this' instance so<a name="line.115"></a>
-<span class="sourceLineNo">116</span> * no other has access concurrently. Reads must be able to continue concurrently.<a name="line.116"></a>
-<span class="sourceLineNo">117</span> */<a name="line.117"></a>
-<span class="sourceLineNo">118</span>@InterfaceAudience.Private<a name="line.118"></a>
-<span class="sourceLineNo">119</span>final class RSGroupInfoManagerImpl implements RSGroupInfoManager {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  private static final Logger LOG = LoggerFactory.getLogger(RSGroupInfoManagerImpl.class);<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  /** Table descriptor for &lt;code&gt;hbase:rsgroup&lt;/code&gt; catalog table */<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private final static HTableDescriptor RSGROUP_TABLE_DESC;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  static {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    RSGROUP_TABLE_DESC = new HTableDescriptor(RSGROUP_TABLE_NAME);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    RSGROUP_TABLE_DESC.addFamily(new HColumnDescriptor(META_FAMILY_BYTES));<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    RSGROUP_TABLE_DESC.setRegionSplitPolicyClassName(DisabledRegionSplitPolicy.class.getName());<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    try {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      RSGROUP_TABLE_DESC.addCoprocessor(<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        MultiRowMutationEndpoint.class.getName(),<a name="line.130"></a>
-<span class="sourceLineNo">131</span>          null, Coprocessor.PRIORITY_SYSTEM, null);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    } catch (IOException ex) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      throw new RuntimeException(ex);<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><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  // There two Maps are immutable and wholesale replaced on each modification<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  // so are safe to access concurrently. See class comment.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private volatile Map&lt;String, RSGroupInfo&gt; rsGroupMap = Collections.emptyMap();<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  private volatile Map&lt;TableName, String&gt; tableMap = Collections.emptyMap();<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private final MasterServices masterServices;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  private Table rsGroupTable;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final ClusterConnection conn;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final ZKWatcher watcher;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  private final RSGroupStartupWorker rsGroupStartupWorker = new RSGroupStartupWorker();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  // contains list of groups that were last flushed to persistent store<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private Set&lt;String&gt; prevRSGroups = new HashSet&lt;&gt;();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private final ServerEventsListenerThread serverEventsListenerThread =<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      new ServerEventsListenerThread();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private FailedOpenUpdaterThread failedOpenUpdaterThread;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  private RSGroupInfoManagerImpl(MasterServices masterServices) throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    this.masterServices = masterServices;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    this.watcher = masterServices.getZooKeeper();<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    this.conn = masterServices.getClusterConnection();<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>  private synchronized void init() throws IOException{<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    refresh();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    serverEventsListenerThread.start();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    masterServices.getServerManager().registerListener(serverEventsListenerThread);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    failedOpenUpdaterThread = new FailedOpenUpdaterThread(masterServices.getConfiguration());<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    failedOpenUpdaterThread.start();<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    masterServices.getServerManager().registerListener(failedOpenUpdaterThread);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  static RSGroupInfoManager getInstance(MasterServices master) throws IOException {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    RSGroupInfoManagerImpl instance = new RSGroupInfoManagerImpl(master);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    instance.init();<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    return instance;<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>  public void start(){<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    // create system table of rsgroup<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    rsGroupStartupWorker.start();<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 synchronized void addRSGroup(RSGroupInfo rsGroupInfo) throws IOException {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    checkGroupName(rsGroupInfo.getName());<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    if (rsGroupMap.get(rsGroupInfo.getName()) != null ||<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        rsGroupInfo.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      throw new DoNotRetryIOException("Group already exists: "+ rsGroupInfo.getName());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    Map&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    newGroupMap.put(rsGroupInfo.getName(), rsGroupInfo);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    flushConfig(newGroupMap);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>  private RSGroupInfo getRSGroupInfo(final String groupName) throws DoNotRetryIOException {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    RSGroupInfo rsGroupInfo = getRSGroup(groupName);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    if (rsGroupInfo == null) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      throw new DoNotRetryIOException("RSGroup " + groupName + " does not exist");<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    return rsGroupInfo;<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 synchronized Set&lt;Address&gt; moveServers(Set&lt;Address&gt; servers, String srcGroup,<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      String dstGroup) throws IOException {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    RSGroupInfo src = getRSGroupInfo(srcGroup);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    RSGroupInfo dst = getRSGroupInfo(dstGroup);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    // If destination is 'default' rsgroup, only add servers that are online. If not online, drop<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    // it. If not 'default' group, add server to 'dst' rsgroup EVEN IF IT IS NOT online (could be a<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    // rsgroup of dead servers that are to come back later).<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    Set&lt;Address&gt; onlineServers = dst.getName().equals(RSGroupInfo.DEFAULT_GROUP)?<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        Utility.getOnlineServers(this.masterServices): null;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    for (Address el: servers) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      src.removeServer(el);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (onlineServers != null) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        if (!onlineServers.contains(el)) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          if (LOG.isDebugEnabled()) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>            LOG.debug("Dropping " + el + " during move-to-default rsgroup because not online");<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          continue;<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>      dst.addServer(el);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    newGroupMap.put(src.getName(), src);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    newGroupMap.put(dst.getName(), dst);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    flushConfig(newGroupMap);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    return dst.getServers();<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 RSGroupInfo getRSGroupOfServer(Address serverHostPort) throws IOException {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    for (RSGroupInfo info: rsGroupMap.values()) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      if (info.containsServer(serverHostPort)) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        return info;<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>    return null;<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>  @Override<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  public RSGroupInfo getRSGroup(String groupName) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    return rsGroupMap.get(groupName);<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>  @Override<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  public String getRSGroupOfTable(TableName tableName) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    return tableMap.get(tableName);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>  @Override<a name="line.248"></a>
-<span class="sourceLineNo">249</span>  public synchronized void moveTables(Set&lt;TableName&gt; tableNames, String groupName)<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      throws IOException {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    if (groupName != null &amp;&amp; !rsGroupMap.containsKey(groupName)) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      throw new DoNotRetryIOException("Group "+groupName+" does not exist or is a special group");<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>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    for(TableName tableName: tableNames) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      if (tableMap.containsKey(tableName)) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        RSGroupInfo src = new RSGroupInfo(newGroupMap.get(tableMap.get(tableName)));<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        src.removeTable(tableName);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        newGroupMap.put(src.getName(), src);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      if(groupName != null) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        RSGroupInfo dst = new RSGroupInfo(newGroupMap.get(groupName));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        dst.addTable(tableName);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        newGroupMap.put(dst.getName(), dst);<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>    flushConfig(newGroupMap);<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>  @Override<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  public synchronized void removeRSGroup(String groupName) throws IOException {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (!rsGroupMap.containsKey(groupName) || groupName.equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      throw new DoNotRetryIOException("Group " + groupName + " does not exist or is a reserved "<a name="line.274"></a>
-<span class="sourceLineNo">275</span>          + "group");<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    newGroupMap.remove(groupName);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    flushConfig(newGroupMap);<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>  @Override<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public List&lt;RSGroupInfo&gt; listRSGroups() {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    return Lists.newLinkedList(rsGroupMap.values());<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 boolean isOnline() {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    return rsGroupStartupWorker.isOnline();<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 void moveServersAndTables(Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables,<a name="line.293"></a>
-<span class="sourceLineNo">294</span>                                   String srcGroup, String dstGroup) throws IOException {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    //get server's group<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    RSGroupInfo srcGroupInfo = getRSGroupInfo(srcGroup);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    RSGroupInfo dstGroupInfo = getRSGroupInfo(dstGroup);<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>    //move servers<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    for (Address el: servers) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      srcGroupInfo.removeServer(el);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      dstGroupInfo.addServer(el);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    //move tables<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    for(TableName tableName: tables) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      srcGroupInfo.removeTable(tableName);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      dstGroupInfo.addTable(tableName);<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>    //flush changed groupinfo<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    newGroupMap.put(srcGroupInfo.getName(), srcGroupInfo);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    newGroupMap.put(dstGroupInfo.getName(), dstGroupInfo);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    flushConfig(newGroupMap);<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 synchronized void removeServers(Set&lt;Address&gt; servers) throws IOException {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    Map&lt;String, RSGroupInfo&gt; rsGroupInfos = new HashMap&lt;String, RSGroupInfo&gt;();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    for (Address el: servers) {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      RSGroupInfo rsGroupInfo = getRSGroupOfServer(el);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      if (rsGroupInfo != null) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>        RSGroupInfo newRsGroupInfo = rsGroupInfos.get(rsGroupInfo.getName());<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        if (newRsGroupInfo == null) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>          rsGroupInfo.removeServer(el);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>          rsGroupInfos.put(rsGroupInfo.getName(), rsGroupInfo);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        } else {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>          newRsGroupInfo.removeServer(el);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>          rsGroupInfos.put(newRsGroupInfo.getName(), newRsGroupInfo);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      }else {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        LOG.warn("Server " + el + " does not belong to any rsgroup.");<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>    if (rsGroupInfos.size() &gt; 0) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      Map&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      newGroupMap.putAll(rsGroupInfos);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      flushConfig(newGroupMap);<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><a name="line.342"></a>
-<span class="sourceLineNo">343</span>  List&lt;RSGroupInfo&gt; retrieveGroupListFromGroupTable() throws IOException {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    List&lt;RSGroupInfo&gt; rsGroupInfoList = Lists.newArrayList();<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    for (Result result : rsGroupTable.getScanner(new Scan())) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      RSGroupProtos.RSGroupInfo proto = RSGroupProtos.RSGroupInfo.parseFrom(<a name="line.346"></a>
-<span class="sourceLineNo">347</span>              result.getValue(META_FAMILY_BYTES, META_QUALIFIER_BYTES));<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      rsGroupInfoList.add(RSGroupProtobufUtil.toGroupInfo(proto));<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    return rsGroupInfoList;<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>  List&lt;RSGroupInfo&gt; retrieveGroupListFromZookeeper() throws IOException {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    List&lt;RSGroupInfo&gt; RSGroupInfoList = Lists.newArrayList();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    //Overwrite any info stored by table, this takes precedence<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    try {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      if(ZKUtil.checkExists(watcher, groupBasePath) != -1) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        List&lt;String&gt; children = ZKUtil.listChildrenAndWatchForNewChildren(watcher, groupBasePath);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (children == null) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          return RSGroupInfoList;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        for(String znode: children) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          byte[] data = ZKUtil.getData(watcher, ZNodePaths.joinZNode(groupBasePath, znode));<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          if(data.length &gt; 0) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>            ProtobufUtil.expectPBMagicPrefix(data);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            ByteArrayInputStream bis = new ByteArrayInputStream(<a name="line.367"></a>
-<span class="sourceLineNo">368</span>                data, ProtobufUtil.lengthOfPBMagic(), data.length);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>            RSGroupInfoList.add(RSGroupProtobufUtil.toGroupInfo(<a name="line.369"></a>
-<span class="sourceLineNo">370</span>                RSGroupProtos.RSGroupInfo.parseFrom(bis)));<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        }<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        LOG.debug("Read ZK GroupInfo count:" + RSGroupInfoList.size());<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      }<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    } catch (KeeperException|DeserializationException|InterruptedException e) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      throw new IOException("Failed to read rsGroupZNode",e);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    return RSGroupInfoList;<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>  @Override<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  public void refresh() throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    refresh(false);<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>   * Read rsgroup info from the source of truth, the hbase:rsgroup table.<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * Update zk cache. Called on startup of the manager.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   */<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  private synchronized void refresh(boolean forceOnline) throws IOException {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    List&lt;RSGroupInfo&gt; groupList = new LinkedList&lt;&gt;();<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>    // Overwrite anything read from zk, group table is source of truth<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    // if online read from GROUP table<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    if (forceOnline || isOnline()) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      LOG.debug("Refreshing in Online mode.");<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      if (rsGroupTable == null) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        rsGroupTable = conn.getTable(RSGROUP_TABLE_NAME);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      groupList.addAll(retrieveGroupListFromGroupTable());<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      LOG.debug("Refreshing in Offline mode.");<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      groupList.addAll(retrieveGroupListFromZookeeper());<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>    // refresh default group, prune<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    NavigableSet&lt;TableName&gt; orphanTables = new TreeSet&lt;&gt;();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    for(String entry: masterServices.getTableDescriptors().getAll().keySet()) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      orphanTables.add(TableName.valueOf(entry));<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>
-<span class="sourceLineNo">412</span>    List&lt;TableName&gt; specialTables =<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        new ArrayList&lt;TableName&gt;(Arrays.asList(AccessControlLists.ACL_TABLE_NAME,<a name="line.413"></a>
-<span class="sourceLineNo">414</span>          TableName.META_TABLE_NAME, TableName.NAMESPACE_TABLE_NAME, RSGROUP_TABLE_NAME));<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    // if quota is enabled, add corresponding system table to special tables list<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    if (QuotaUtil.isQuotaEnabled(conn.getConfiguration())) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      specialTables.add(QuotaTableUtil.QUOTA_TABLE_NAME);<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>    for (TableName table : specialTables) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      orphanTables.add(table);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    for (RSGroupInfo group: groupList) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      if(!group.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        orphanTables.removeAll(group.getTables());<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><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // This is added to the last of the list so it overwrites the 'default' rsgroup loaded<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    // from region group table or zk<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    groupList.add(new RSGroupInfo(RSGroupInfo.DEFAULT_GROUP, getDefaultServers(),<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        orphanTables));<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // populate the data<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    HashMap&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    HashMap&lt;TableName, String&gt; newTableMap = Maps.newHashMap();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    for (RSGroupInfo group : groupList) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      newGroupMap.put(group.getName(), group);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      for(TableName table: group.getTables()) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        newTableMap.put(table, group.getName());<a name="line.440"></a>
+<span class="sourceLineNo">026</span>import java.util.Collections;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.HashMap;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.HashSet;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.LinkedList;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.List;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.Map;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.NavigableSet;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.Set;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.SortedSet;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.TreeSet;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.Cell;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.Coprocessor;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HConstants;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.MetaTableAccessor.DefaultVisitorBase;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ServerName;<a name="line.48"></a>
+<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.client.ClusterConnection;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.Get;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.client.Put;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.client.Result;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.Table;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.constraint.ConstraintException;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.master.ServerListener;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.net.Address;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.protobuf.ProtobufMagic;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.protobuf.generated.MultiRowMutationProtos;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupProtos;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.zookeeper.KeeperException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.slf4j.Logger;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.slf4j.LoggerFactory;<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>/**<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * This is an implementation of {@link RSGroupInfoManager} which makes<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * use of an HBase table as the persistence store for the group information.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * It also makes use of zookeeper to store group information needed<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * for bootstrapping during offline mode.<a name="line.94"></a>
+<span class="sourceLineNo">095</span> *<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * &lt;h2&gt;Concurrency&lt;/h2&gt;<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * RSGroup state is kept locally in Maps. There is a rsgroup name to cached<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * RSGroupInfo Map at {@link #rsGroupMap} and a Map of tables to the name of the<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * rsgroup they belong too (in {@link #tableMap}). These Maps are persisted to the<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * hbase:rsgroup table (and cached in zk) on each modification.<a name="line.100"></a>
+<span class="sourceLineNo">101</span> *<a name="line.101"></a>
+<span class="sourceLineNo">102</span> * &lt;p&gt;Mutations on state are synchronized but reads can continue without having<a name="line.102"></a>
+<span class="sourceLineNo">103</span> * to wait on an instance monitor, mutations do wholesale replace of the Maps on<a name="line.103"></a>
+<span class="sourceLineNo">104</span> * update -- Copy-On-Write; the local Maps of state are read-only, just-in-case<a name="line.104"></a>
+<span class="sourceLineNo">105</span> * (see flushConfig).<a name="line.105"></a>
+<span class="sourceLineNo">106</span> *<a name="line.106"></a>
+<span class="sourceLineNo">107</span> * &lt;p&gt;Reads must not block else there is a danger we'll deadlock.<a name="line.107"></a>
+<span class="sourceLineNo">108</span> *<a name="line.108"></a>
+<span class="sourceLineNo">109</span> * &lt;p&gt;Clients of this class, the {@link RSGroupAdminEndpoint} for example, want to query and<a name="line.109"></a>
+<span class="sourceLineNo">110</span> * then act on the results of the query modifying cache in zookeeper without another thread<a name="line.110"></a>
+<span class="sourceLineNo">111</span> * making intermediate modifications. These clients synchronize on the 'this' instance so<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * no other has access concurrently. Reads must be able to continue concurrently.<a name="line.112"></a>
+<span class="sourceLineNo">113</span> */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>@InterfaceAudience.Private<a name="line.114"></a>
+<span class="sourceLineNo">115</span>final class RSGroupInfoManagerImpl implements RSGroupInfoManager {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private static final Logger LOG = LoggerFactory.getLogger(RSGroupInfoManagerImpl.class);<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  /** Table descriptor for &lt;code&gt;hbase:rsgroup&lt;/code&gt; catalog table */<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  private final static HTableDescriptor RSGROUP_TABLE_DESC;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  static {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    RSGROUP_TABLE_DESC = new HTableDescriptor(RSGROUP_TABLE_NAME);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    RSGROUP_TABLE_DESC.addFamily(new HColumnDescriptor(META_FAMILY_BYTES));<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    RSGROUP_TABLE_DESC.setRegionSplitPolicyClassName(DisabledRegionSplitPolicy.class.getName());<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    try {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      RSGROUP_TABLE_DESC.addCoprocessor(<a name="line.125"></a>
+<span class="sourceLineNo">126</span>        MultiRowMutationEndpoint.class.getName(),<a name="line.126"></a>
+<span class="sourceLineNo">127</span>          null, Coprocessor.PRIORITY_SYSTEM, null);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    } catch (IOException ex) {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      throw new RuntimeException(ex);<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>  // There two Maps are immutable and wholesale replaced on each modification<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  // so are safe to access concurrently. See class comment.<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private volatile Map&lt;String, RSGroupInfo&gt; rsGroupMap = Collections.emptyMap();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  private volatile Map&lt;TableName, String&gt; tableMap = Collections.emptyMap();<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  private final MasterServices masterServices;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  private Table rsGroupTable;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private final ClusterConnection conn;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  private final ZKWatcher watcher;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  private final RSGroupStartupWorker rsGroupStartupWorker = new RSGroupStartupWorker();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  // contains list of groups that were last flushed to persistent store<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  private Set&lt;String&gt; prevRSGroups = new HashSet&lt;&gt;();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private final ServerEventsListenerThread serverEventsListenerThread =<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      new ServerEventsListenerThread();<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  private FailedOpenUpdaterThread failedOpenUpdaterThread;<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private RSGroupInfoManagerImpl(MasterServices masterServices) throws IOException {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    this.masterServices = masterServices;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    this.watcher = masterServices.getZooKeeper();<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    this.conn = masterServices.getClusterConnection();<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>  private synchronized void init() throws IOException{<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    refresh();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    serverEventsListenerThread.start();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    masterServices.getServerManager().registerListener(serverEventsListenerThread);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    failedOpenUpdaterThread = new FailedOpenUpdaterThread(masterServices.getConfiguration());<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    failedOpenUpdaterThread.start();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    masterServices.getServerManager().registerListener(failedOpenUpdaterThread);<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>  static RSGroupInfoManager getInstance(MasterServices master) throws IOException {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    RSGroupInfoManagerImpl instance = new RSGroupInfoManagerImpl(master);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    instance.init();<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    return instance;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  public void start(){<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // create system table of rsgroup<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    rsGroupStartupWorker.start();<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 synchronized void addRSGroup(RSGroupInfo rsGroupInfo) throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    checkGroupName(rsGroupInfo.getName());<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    if (rsGroupMap.get(rsGroupInfo.getName()) != null ||<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        rsGroupInfo.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      throw new DoNotRetryIOException("Group already exists: "+ rsGroupInfo.getName());<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    Map&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    newGroupMap.put(rsGroupInfo.getName(), rsGroupInfo);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    flushConfig(newGroupMap);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private RSGroupInfo getRSGroupInfo(final String groupName) throws DoNotRetryIOException {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    RSGroupInfo rsGroupInfo = getRSGroup(groupName);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    if (rsGroupInfo == null) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      throw new DoNotRetryIOException("RSGroup " + groupName + " does not exist");<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    return rsGroupInfo;<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>  @Override<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  public synchronized Set&lt;Address&gt; moveServers(Set&lt;Address&gt; servers, String srcGroup,<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      String dstGroup) throws IOException {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    RSGroupInfo src = getRSGroupInfo(srcGroup);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    RSGroupInfo dst = getRSGroupInfo(dstGroup);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    // If destination is 'default' rsgroup, only add servers that are online. If not online, drop<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // it. If not 'default' group, add server to 'dst' rsgroup EVEN IF IT IS NOT online (could be a<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // rsgroup of dead servers that are to come back later).<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    Set&lt;Address&gt; onlineServers = dst.getName().equals(RSGroupInfo.DEFAULT_GROUP)?<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        Utility.getOnlineServers(this.masterServices): null;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    for (Address el: servers) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      src.removeServer(el);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      if (onlineServers != null) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        if (!onlineServers.contains(el)) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>          if (LOG.isDebugEnabled()) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>            LOG.debug("Dropping " + el + " during move-to-default rsgroup because not online");<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          }<a name="line.211"></a>
+<span class="sourceLineNo">212</span>          continue;<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>      dst.addServer(el);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    newGroupMap.put(src.getName(), src);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    newGroupMap.put(dst.getName(), dst);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    flushConfig(newGroupMap);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    return dst.getServers();<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 RSGroupInfo getRSGroupOfServer(Address serverHostPort) throws IOException {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    for (RSGroupInfo info: rsGroupMap.values()) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      if (info.containsServer(serverHostPort)) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        return info;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      }<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    return null;<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>  public RSGroupInfo getRSGroup(String groupName) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return rsGroupMap.get(groupName);<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>  @Override<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  public String getRSGroupOfTable(TableName tableName) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    return tableMap.get(tableName);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>  @Override<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  public synchronized void moveTables(Set&lt;TableName&gt; tableNames, String groupName)<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      throws IOException {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    if (groupName != null &amp;&amp; !rsGroupMap.containsKey(groupName)) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      throw new DoNotRetryIOException("Group "+groupName+" does not exist");<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>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    for(TableName tableName: tableNames) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      if (tableMap.containsKey(tableName)) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        RSGroupInfo src = new RSGroupInfo(newGroupMap.get(tableMap.get(tableName)));<a name="line.254"></a>
+<span class="sourceLineNo">255</span>        src.removeTable(tableName);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        newGroupMap.put(src.getName(), src);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      if(groupName != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        RSGroupInfo dst = new RSGroupInfo(newGroupMap.get(groupName));<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        dst.addTable(tableName);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        newGroupMap.put(dst.getName(), dst);<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>    flushConfig(newGroupMap);<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>  @Override<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  public synchronized void removeRSGroup(String groupName) throws IOException {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    if (!rsGroupMap.containsKey(groupName) || groupName.equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      throw new DoNotRetryIOException("Group " + groupName + " does not exist or is a reserved "<a name="line.270"></a>
+<span class="sourceLineNo">271</span>          + "group");<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    newGroupMap.remove(groupName);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    flushConfig(newGroupMap);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>  @Override<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  public List&lt;RSGroupInfo&gt; listRSGroups() {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    return Lists.newLinkedList(rsGroupMap.values());<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>  @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  public boolean isOnline() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    return rsGroupStartupWorker.isOnline();<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
+<span class="sourceLineNo">287</span><a name="line.287"></a>
+<span class="sourceLineNo">288</span>  @Override<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  public void moveServersAndTables(Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables,<a name="line.289"></a>
+<span class="sourceLineNo">290</span>                                   String srcGroup, String dstGroup) throws IOException {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    //get server's group<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    RSGroupInfo srcGroupInfo = getRSGroupInfo(srcGroup);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    RSGroupInfo dstGroupInfo = getRSGroupInfo(dstGroup);<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    //move servers<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    for (Address el: servers) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      srcGroupInfo.removeServer(el);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      dstGroupInfo.addServer(el);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    //move tables<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    for(TableName tableName: tables) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      srcGroupInfo.removeTable(tableName);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      dstGroupInfo.addTable(tableName);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>    //flush changed groupinfo<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    newGroupMap.put(srcGroupInfo.getName(), srcGroupInfo);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    newGroupMap.put(dstGroupInfo.getName(), dstGroupInfo);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    flushConfig(newGroupMap);<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 synchronized void removeServers(Set&lt;Address&gt; servers) throws IOException {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    Map&lt;String, RSGroupInfo&gt; rsGroupInfos = new HashMap&lt;String, RSGroupInfo&gt;();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    for (Address el: servers) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      RSGroupInfo rsGroupInfo = getRSGroupOfServer(el);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      if (rsGroupInfo != null) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        RSGroupInfo newRsGroupInfo = rsGroupInfos.get(rsGroupInfo.getName());<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        if (newRsGroupInfo == null) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          rsGroupInfo.removeServer(el);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          rsGroupInfos.put(rsGroupInfo.getName(), rsGroupInfo);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        } else {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          newRsGroupInfo.removeServer(el);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>          rsGroupInfos.put(newRsGroupInfo.getName(), newRsGroupInfo);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      }else {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        LOG.warn("Server " + el + " does not belong to any rsgroup.");<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    if (rsGroupInfos.size() &gt; 0) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      Map&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      newGroupMap.putAll(rsGroupInfos);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      flushConfig(newGroupMap);<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><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  List&lt;RSGroupInfo&gt; retrieveGroupListFromGroupTable() throws IOException {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    List&lt;RSGroupInfo&gt; rsGroupInfoList = Lists.newArrayList();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    for (Result result : rsGroupTable.getScanner(new Scan())) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      RSGroupProtos.RSGroupInfo proto = RSGroupProtos.RSGroupInfo.parseFrom(<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              result.getValue(META_FAMILY_BYTES, META_QUALIFIER_BYTES));<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      rsGroupInfoList.add(RSGroupProtobufUtil.toGroupInfo(proto));<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    return rsGroupInfoList;<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>  List&lt;RSGroupInfo&gt; retrieveGroupListFromZookeeper() throws IOException {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    List&lt;RSGroupInfo&gt; RSGroupInfoList = Lists.newArrayList();<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    //Overwrite any info stored by table, this takes precedence<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    try {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      if(ZKUtil.checkExists(watcher, groupBasePath) != -1) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        List&lt;String&gt; children = ZKUtil.listChildrenAndWatchForNewChildren(watcher, groupBasePath);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        if (children == null) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>          return RSGroupInfoList;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        for(String znode: children) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          byte[] data = ZKUtil.getData(watcher, ZNodePaths.joinZNode(groupBasePath, znode));<a name="line.360"></a>
+<span class="sourceLineNo">361</span>          if(data.length &gt; 0) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>            ProtobufUtil.expectPBMagicPrefix(data);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>            ByteArrayInputStream bis = new ByteArrayInputStream(<a name="line.363"></a>
+<span class="sourceLineNo">364</span>                data, ProtobufUtil.lengthOfPBMagic(), data.length);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>            RSGroupInfoList.add(RSGroupProtobufUtil.toGroupInfo(<a name="line.365"></a>
+<span class="sourceLineNo">366</span>                RSGroupProtos.RSGroupInfo.parseFrom(bis)));<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>        LOG.debug("Read ZK GroupInfo count:" + RSGroupInfoList.size());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    } catch (KeeperException|DeserializationException|InterruptedException e) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      throw new IOException("Failed to read rsGroupZNode",e);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    return RSGroupInfoList;<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 void refresh() throws IOException {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    refresh(false);<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>   * Read rsgroup info from the source of truth, the hbase:rsgroup table.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * Update zk cache. Called on startup of the manager.<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   */<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  private synchronized void refresh(boolean forceOnline) throws IOException {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    List&lt;RSGroupInfo&gt; groupList = new LinkedList&lt;&gt;();<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span>    // Overwrite anything read from zk, group table is source of truth<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    // if online read from GROUP table<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    if (forceOnline || isOnline()) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      LOG.debug("Refreshing in Online mode.");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      if (rsGroupTable == null) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        rsGroupTable = conn.getTable(RSGROUP_TABLE_NAME);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      groupList.addAll(retrieveGroupListFromGroupTable());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    } else {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      LOG.debug("Refreshing in Offline mode.");<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      groupList.addAll(retrieveGroupListFromZookeeper());<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>    // refresh default group, prune<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    NavigableSet&lt;TableName&gt; orphanTables = new TreeSet&lt;&gt;();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    for(String entry: masterServices.getTableDescriptors().getAll().keySet()) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      orphanTables.add(TableName.valueOf(entry));<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    for (RSGroupInfo group: groupList) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      if(!group.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        orphanTables.removeAll(group.getTables());<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>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span>    // This is added to the last of the list so it overwrites the 'default' rsgroup loaded<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    // from region group table or zk<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    groupList.add(new RSGroupInfo(RSGroupInfo.DEFAULT_GROUP, getDefaultServers(),<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        orphanTables));<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>    // populate the data<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    HashMap&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    HashMap&lt;TableName, String&gt; newTableMap = Maps.newHashMap();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    for (RSGroupInfo group : groupList) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      newGroupMap.put(group.getName(), group);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      for(TableName table: group.getTables()) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        newTableMap.put(table, group.getName());<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    resetRSGroupAndTableMaps(newGroupMap, newTableMap);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    updateCacheOfRSGroups(rsGroupMap.keySet());<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>  private synchronized Map&lt;TableName,String&gt; flushConfigTable(Map&lt;String,RSGroupInfo&gt; groupMap)<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Map&lt;TableName,String&gt; newTableMap = Maps.newHashMap();<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    List&lt;Mutation&gt; mutations = Lists.newArrayList();<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // populate deletes<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    for(String groupName : prevRSGroups) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      if(!groupMap.containsKey(groupName)) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        Delete d = new Delete(Bytes.toBytes(groupName));<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        mutations.add(d);<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>    resetRSGroupAndTableMaps(newGroupMap, newTableMap);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    updateCacheOfRSGroups(rsGroupMap.keySet());<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>  private synchronized Map&lt;TableName,String&gt; flushConfigTable(Map&lt;String,RSGroupInfo&gt; groupMap)<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      throws IOException {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    Map&lt;TableName,String&gt; newTableMap = Maps.newHashMap();<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    List&lt;Mutation&gt; mutations = Lists.newArrayList();<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span>    // populate deletes<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    for(String groupName : prevRSGroups) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      if(!groupMap.containsKey(groupName)) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        Delete d = new Delete(Bytes.toBytes(groupName));<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        mutations.add(d);<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>    // populate puts<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    for(RSGroupInfo RSGroupInfo : groupMap.values()) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      RSGroupProtos.RSGroupInfo proto = RSGroupProtobufUtil.toProtoGroupInfo(RSGroupInfo);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      Put p = new Put(Bytes.toBytes(RSGroupInfo.getName()));<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      p.addColumn(META_FAMILY_BYTES, META_QUALIFIER_BYTES, proto.toByteArray());<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      mutations.add(p);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      for(TableName entry: RSGroupInfo.getTables()) {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        newTableMap.put(entry, RSGroupInfo.getName());<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      }<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>    if(mutations.size() &gt; 0) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      multiMutate(mutations);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    return newTableMap;<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>  private synchronized void flushConfig()<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    flushConfig(this.rsGroupMap);<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>  private synchronized void flushConfig(Map&

<TRUNCATED>

[31/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html
index 05d2c3c..6e02e32 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html
@@ -26,441 +26,376 @@
 <span class="sourceLineNo">018</span><a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.KeyValue.Type;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.slf4j.Logger;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.slf4j.LoggerFactory;<a name="line.27"></a>
-<span class="sourceLineNo">028</span><a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hbase.thirdparty.com.google.common.primitives.Longs;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
-<span class="sourceLineNo">032</span> * Compare two HBase cells.  Do not use this method comparing &lt;code&gt;-ROOT-&lt;/code&gt; or<a name="line.32"></a>
-<span class="sourceLineNo">033</span> * &lt;code&gt;hbase:meta&lt;/code&gt; cells.  Cells from these tables need a specialized comparator, one that<a name="line.33"></a>
-<span class="sourceLineNo">034</span> * takes account of the special formatting of the row where we have commas to delimit table from<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * regionname, from row.  See KeyValue for how it has a special comparator to do hbase:meta cells<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * and yet another for -ROOT-.<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * While using this comparator for {{@link #compareRows(Cell, Cell)} et al, the hbase:meta cells<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * format should be taken into consideration, for which the instance of this comparator<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * should be used.  In all other cases the static APIs in this comparator would be enough<a name="line.39"></a>
-<span class="sourceLineNo">040</span> */<a name="line.40"></a>
-<span class="sourceLineNo">041</span>@edu.umd.cs.findbugs.annotations.SuppressWarnings(<a name="line.41"></a>
-<span class="sourceLineNo">042</span>    value="UNKNOWN",<a name="line.42"></a>
-<span class="sourceLineNo">043</span>    justification="Findbugs doesn't like the way we are negating the result of a compare in below")<a name="line.43"></a>
-<span class="sourceLineNo">044</span>@InterfaceAudience.Private<a name="line.44"></a>
-<span class="sourceLineNo">045</span>@InterfaceStability.Evolving<a name="line.45"></a>
-<span class="sourceLineNo">046</span>public class CellComparatorImpl implements CellComparator {<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  static final Logger LOG = LoggerFactory.getLogger(CellComparatorImpl.class);<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  /**<a name="line.48"></a>
-<span class="sourceLineNo">049</span>   * Comparator for plain key/values; i.e. non-catalog table key/values. Works on Key portion<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   * of KeyValue only.<a name="line.50"></a>
-<span class="sourceLineNo">051</span>   */<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  public static final CellComparatorImpl COMPARATOR = new CellComparatorImpl();<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  /**<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * A {@link CellComparatorImpl} for &lt;code&gt;hbase:meta&lt;/code&gt; catalog table<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   * {@link KeyValue}s.<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   */<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  public static final CellComparatorImpl META_COMPARATOR = new MetaCellComparator();<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  @Override<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  public int compare(Cell a, Cell b) {<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    return compare(a, b, false);<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  }<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>   * Compare cells.<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   * @param ignoreSequenceid True if we are to compare the key portion only and ignore<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   *  the sequenceid. Set to false to compare key and consider sequenceid.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * @return 0 if equal, -1 if a &amp;lt; b, and +1 if a &amp;gt; b.<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  @Override<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  public int compare(final Cell a, final Cell b, boolean ignoreSequenceid) {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    int diff = 0;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    if (a instanceof ByteBufferKeyValue &amp;&amp; b instanceof ByteBufferKeyValue) {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>      diff = compareByteBufferKeyValue((ByteBufferKeyValue)a, (ByteBufferKeyValue)b);<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      if (diff != 0) {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>        return diff;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      }<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    } else {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      diff = compareRows(a, b);<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      if (diff != 0) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>        return diff;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      }<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>      diff = compareWithoutRow(a, b);<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      if (diff != 0) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        return diff;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      }<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>    // Negate following comparisons so later edits show up first mvccVersion: later sorts first<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    return ignoreSequenceid? diff: Longs.compare(b.getSequenceId(), a.getSequenceId());<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  }<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>   * Specialized comparator for the ByteBufferKeyValue type exclusivesly.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * Caches deserialized lengths of rows and families, etc., and reuses them where it can<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * (ByteBufferKeyValue has been changed to be amenable to our providing pre-made lengths, etc.)<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   */<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private static final int compareByteBufferKeyValue(ByteBufferKeyValue left,<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      ByteBufferKeyValue right) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    // Compare Rows. Cache row length.<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    int leftRowLength = left.getRowLength();<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    int rightRowLength = right.getRowLength();<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    int diff = ByteBufferUtils.compareTo(<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        left.getRowByteBuffer(), left.getRowPosition(), leftRowLength,<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        right.getRowByteBuffer(), right.getRowPosition(), rightRowLength);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    if (diff != 0) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      return diff;<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>    // If the column is not specified, the "minimum" key type appears the<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    // latest in the sorted order, regardless of the timestamp. This is used<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    // for specifying the last key/value in a given row, because there is no<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // "lexicographically last column" (it would be infinitely long). The<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    // "maximum" key type does not need this behavior.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    // Copied from KeyValue. This is bad in that we can't do memcmp w/ special rules like this.<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    // I tried to get rid of the above but scanners depend on it. TODO.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    int leftFamilyLengthPosition = left.getFamilyLengthPosition(leftRowLength);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    int leftFamilyLength = left.getFamilyLength(leftFamilyLengthPosition);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    int rightFamilyLengthPosition = right.getFamilyLengthPosition(rightRowLength);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    int rightFamilyLength = right.getFamilyLength(rightFamilyLengthPosition);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    int leftKeyLength = left.getKeyLength();<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    int leftQualifierLength = left.getQualifierLength(leftKeyLength, leftRowLength,<a name="line.123"></a>
-<span class="sourceLineNo">124</span>        leftFamilyLength);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    byte leftType = left.getTypeByte(leftKeyLength);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    if (leftFamilyLength + leftQualifierLength == 0 &amp;&amp; leftType == Type.Minimum.getCode()) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      // left is "bigger", i.e. it appears later in the sorted order<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      return 1;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    int rightKeyLength = right.getKeyLength();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    int rightQualifierLength = right.getQualifierLength(rightKeyLength, rightRowLength,<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        rightFamilyLength);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    byte rightType = right.getTypeByte(rightKeyLength);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    if (rightFamilyLength + rightQualifierLength == 0 &amp;&amp; rightType == Type.Minimum.getCode()) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      return -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>    // Compare families.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    int leftFamilyPosition = left.getFamilyPosition(leftFamilyLengthPosition);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    int rightFamilyPosition = right.getFamilyPosition(rightFamilyLengthPosition);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    diff = ByteBufferUtils.compareTo(<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        left.getFamilyByteBuffer(), leftFamilyPosition, leftFamilyLength,<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        right.getFamilyByteBuffer(), rightFamilyPosition, rightFamilyLength);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    if (diff != 0) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      return diff;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    // Compare qualifiers<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    diff = ByteBufferUtils.compareTo(left.getQualifierByteBuffer(),<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        left.getQualifierPosition(leftFamilyPosition, leftFamilyLength), leftQualifierLength,<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        right.getQualifierByteBuffer(),<a name="line.150"></a>
-<span class="sourceLineNo">151</span>        right.getQualifierPosition(rightFamilyPosition, rightFamilyLength),<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        rightQualifierLength);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    if (diff != 0) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return diff;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    // Timestamps.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    diff = compareTimestampsInternal(left.getTimestamp(leftKeyLength),<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        right.getTimestamp(rightKeyLength));<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    if (diff != 0) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      return diff;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    // Compare types. Let the delete types sort ahead of puts; i.e. types<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    // of higher numbers sort before those of lesser numbers. Maximum (255)<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    // appears ahead of everything, and minimum (0) appears after<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    // everything.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    return (0xff &amp; rightType) - (0xff &amp; leftType);<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>  /**<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * Compares the family and qualifier part of the cell<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * @return 0 if both cells are equal, 1 if left cell is bigger than right, -1 otherwise<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public final int compareColumns(final Cell left, final Cell right) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    int diff = compareFamilies(left, right);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    if (diff != 0) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      return diff;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    return compareQualifiers(left, right);<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>  /**<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * Compare the families of left and right cell<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * @return 0 if both cells are equal, 1 if left cell is bigger than right, -1 otherwise<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 final int compareFamilies(Cell left, Cell right) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getFamilyByteBuffer(),<a name="line.188"></a>
-<span class="sourceLineNo">189</span>          ((ByteBufferExtendedCell) left).getFamilyPosition(), left.getFamilyLength(),<a name="line.189"></a>
-<span class="sourceLineNo">190</span>          ((ByteBufferExtendedCell) right).getFamilyByteBuffer(),<a name="line.190"></a>
-<span class="sourceLineNo">191</span>          ((ByteBufferExtendedCell) right).getFamilyPosition(), right.getFamilyLength());<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    if (left instanceof ByteBufferExtendedCell) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getFamilyByteBuffer(),<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          ((ByteBufferExtendedCell) left).getFamilyPosition(), left.getFamilyLength(),<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          right.getFamilyArray(), right.getFamilyOffset(), right.getFamilyLength());<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    if (right instanceof ByteBufferExtendedCell) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // Notice how we flip the order of the compare here. We used to negate the return value but<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      // see what FindBugs says<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      // http://findbugs.sourceforge.net/bugDescriptions.html#RV_NEGATING_RESULT_OF_COMPARETO<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      // It suggest flipping the order to get same effect and 'safer'.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      return ByteBufferUtils.compareTo(<a name="line.203"></a>
-<span class="sourceLineNo">204</span>          left.getFamilyArray(), left.getFamilyOffset(), left.getFamilyLength(),<a name="line.204"></a>
-<span class="sourceLineNo">205</span>          ((ByteBufferExtendedCell)right).getFamilyByteBuffer(),<a name="line.205"></a>
-<span class="sourceLineNo">206</span>          ((ByteBufferExtendedCell)right).getFamilyPosition(), right.getFamilyLength());<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    return Bytes.compareTo(left.getFamilyArray(), left.getFamilyOffset(), left.getFamilyLength(),<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        right.getFamilyArray(), right.getFamilyOffset(), right.getFamilyLength());<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>  /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * Compare the qualifiers part of the left and right cells.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * @return 0 if both cells are equal, 1 if left cell is bigger than right, -1 otherwise<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   */<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  @Override<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  public final int compareQualifiers(Cell left, Cell right) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      return ByteBufferUtils<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          .compareTo(((ByteBufferExtendedCell) left).getQualifierByteBuffer(),<a name="line.220"></a>
-<span class="sourceLineNo">221</span>              ((ByteBufferExtendedCell) left).getQualifierPosition(),<a name="line.221"></a>
-<span class="sourceLineNo">222</span>              left.getQualifierLength(), ((ByteBufferExtendedCell) right).getQualifierByteBuffer(),<a name="line.222"></a>
-<span class="sourceLineNo">223</span>              ((ByteBufferExtendedCell) right).getQualifierPosition(),<a name="line.223"></a>
-<span class="sourceLineNo">224</span>              right.getQualifierLength());<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    if (left instanceof ByteBufferExtendedCell) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getQualifierByteBuffer(),<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          ((ByteBufferExtendedCell) left).getQualifierPosition(), left.getQualifierLength(),<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          right.getQualifierArray(), right.getQualifierOffset(), right.getQualifierLength());<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    if (right instanceof ByteBufferExtendedCell) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      // Notice how we flip the order of the compare here. We used to negate the return value but<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // see what FindBugs says<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      // http://findbugs.sourceforge.net/bugDescriptions.html#RV_NEGATING_RESULT_OF_COMPARETO<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      // It suggest flipping the order to get same effect and 'safer'.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      return ByteBufferUtils.compareTo(left.getQualifierArray(),<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          left.getQualifierOffset(), left.getQualifierLength(),<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          ((ByteBufferExtendedCell)right).getQualifierByteBuffer(),<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          ((ByteBufferExtendedCell)right).getQualifierPosition(), right.getQualifierLength());<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    return Bytes.compareTo(left.getQualifierArray(), left.getQualifierOffset(),<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        left.getQualifierLength(), right.getQualifierArray(), right.getQualifierOffset(),<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        right.getQualifierLength());<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>  /**<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * Compares the rows of the left and right cell.<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * For the hbase:meta case this method is overridden such that it can handle hbase:meta cells.<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * The caller should ensure using the appropriate comparator for hbase:meta.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * @return 0 if both cells are equal, 1 if left cell is bigger than right, -1 otherwise<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 int compareRows(final Cell left, final Cell right) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    return compareRows(left, left.getRowLength(), right, right.getRowLength());<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>  int compareRows(final Cell left, int leftRowLength, final Cell right, int rightRowLength) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    // left and right can be exactly the same at the beginning of a row<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    if (left == right) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      return 0;<a name="line.260"></a>
+<span class="sourceLineNo">021</span>import java.util.Comparator;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.KeyValue.Type;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<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.apache.hbase.thirdparty.com.google.common.primitives.Longs;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.slf4j.Logger;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.slf4j.LoggerFactory;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span><a name="line.33"></a>
+<span class="sourceLineNo">034</span>/**<a name="line.34"></a>
+<span class="sourceLineNo">035</span> * Compare two HBase cells.  Do not use this method comparing &lt;code&gt;-ROOT-&lt;/code&gt; or<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * &lt;code&gt;hbase:meta&lt;/code&gt; cells.  Cells from these tables need a specialized comparator, one that<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * takes account of the special formatting of the row where we have commas to delimit table from<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * regionname, from row.  See KeyValue for how it has a special comparator to do hbase:meta cells<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * and yet another for -ROOT-.<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * &lt;p&gt;While using this comparator for {{@link #compareRows(Cell, Cell)} et al, the hbase:meta cells<a name="line.40"></a>
+<span class="sourceLineNo">041</span> * format should be taken into consideration, for which the instance of this comparator<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * should be used.  In all other cases the static APIs in this comparator would be enough<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * &lt;p&gt;HOT methods. We spend a good portion of CPU comparing. Anything that makes the compare<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * faster will likely manifest at the macro level. See also<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * {@link BBKVComparator}. Use it when mostly {@link ByteBufferKeyValue}s.<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * &lt;/p&gt;<a name="line.46"></a>
+<span class="sourceLineNo">047</span> */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>@edu.umd.cs.findbugs.annotations.SuppressWarnings(<a name="line.48"></a>
+<span class="sourceLineNo">049</span>    value="UNKNOWN",<a name="line.49"></a>
+<span class="sourceLineNo">050</span>    justification="Findbugs doesn't like the way we are negating the result of a compare in below")<a name="line.50"></a>
+<span class="sourceLineNo">051</span>@InterfaceAudience.Private<a name="line.51"></a>
+<span class="sourceLineNo">052</span>@InterfaceStability.Evolving<a name="line.52"></a>
+<span class="sourceLineNo">053</span>public class CellComparatorImpl implements CellComparator {<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  static final Logger LOG = LoggerFactory.getLogger(CellComparatorImpl.class);<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  /**<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   * Comparator for plain key/values; i.e. non-catalog table key/values. Works on Key portion<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   * of KeyValue only.<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  public static final CellComparatorImpl COMPARATOR = new CellComparatorImpl();<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  /**<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * A {@link CellComparatorImpl} for &lt;code&gt;hbase:meta&lt;/code&gt; catalog table<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * {@link KeyValue}s.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   */<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  public static final CellComparatorImpl META_COMPARATOR = new MetaCellComparator();<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  @Override<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  public final int compare(final Cell a, final Cell b) {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    return compare(a, b, false);<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 int compare(final Cell a, final Cell b, boolean ignoreSequenceid) {<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>    int diff = 0;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    // "Peel off" the most common path.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    if (a instanceof ByteBufferKeyValue &amp;&amp; b instanceof ByteBufferKeyValue) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      diff = BBKVComparator.compare((ByteBufferKeyValue)a, (ByteBufferKeyValue)b);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      if (diff != 0) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>        return diff;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      }<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    } else {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      diff = compareRows(a, b);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      if (diff != 0) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>        return diff;<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>      diff = compareWithoutRow(a, b);<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      if (diff != 0) {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>        return diff;<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>    // Negate following comparisons so later edits show up first mvccVersion: later sorts first<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    return ignoreSequenceid? diff: Long.compare(b.getSequenceId(), a.getSequenceId());<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>  /**<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * Compares the family and qualifier part of the cell<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * @return 0 if both cells are equal, 1 if left cell is bigger than right, -1 otherwise<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   */<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public final int compareColumns(final Cell left, final Cell right) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    int diff = compareFamilies(left, right);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (diff != 0) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      return diff;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    return compareQualifiers(left, right);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * Compare the families of left and right cell<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * @return 0 if both cells are equal, 1 if left cell is bigger than right, -1 otherwise<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public final int compareFamilies(Cell left, Cell right) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getFamilyByteBuffer(),<a name="line.116"></a>
+<span class="sourceLineNo">117</span>          ((ByteBufferExtendedCell) left).getFamilyPosition(), left.getFamilyLength(),<a name="line.117"></a>
+<span class="sourceLineNo">118</span>          ((ByteBufferExtendedCell) right).getFamilyByteBuffer(),<a name="line.118"></a>
+<span class="sourceLineNo">119</span>          ((ByteBufferExtendedCell) right).getFamilyPosition(), right.getFamilyLength());<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    if (left instanceof ByteBufferExtendedCell) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getFamilyByteBuffer(),<a name="line.122"></a>
+<span class="sourceLineNo">123</span>          ((ByteBufferExtendedCell) left).getFamilyPosition(), left.getFamilyLength(),<a name="line.123"></a>
+<span class="sourceLineNo">124</span>          right.getFamilyArray(), right.getFamilyOffset(), right.getFamilyLength());<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    if (right instanceof ByteBufferExtendedCell) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      // Notice how we flip the order of the compare here. We used to negate the return value but<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      // see what FindBugs says<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      // http://findbugs.sourceforge.net/bugDescriptions.html#RV_NEGATING_RESULT_OF_COMPARETO<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      // It suggest flipping the order to get same effect and 'safer'.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      return ByteBufferUtils.compareTo(<a name="line.131"></a>
+<span class="sourceLineNo">132</span>          left.getFamilyArray(), left.getFamilyOffset(), left.getFamilyLength(),<a name="line.132"></a>
+<span class="sourceLineNo">133</span>          ((ByteBufferExtendedCell)right).getFamilyByteBuffer(),<a name="line.133"></a>
+<span class="sourceLineNo">134</span>          ((ByteBufferExtendedCell)right).getFamilyPosition(), right.getFamilyLength());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    }<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    return Bytes.compareTo(left.getFamilyArray(), left.getFamilyOffset(), left.getFamilyLength(),<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        right.getFamilyArray(), right.getFamilyOffset(), right.getFamilyLength());<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>  /**<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * Compare the qualifiers part of the left and right cells.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   * @return 0 if both cells are equal, 1 if left cell is bigger than right, -1 otherwise<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   */<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  public final int compareQualifiers(Cell left, Cell right) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      return ByteBufferUtils<a name="line.147"></a>
+<span class="sourceLineNo">148</span>          .compareTo(((ByteBufferExtendedCell) left).getQualifierByteBuffer(),<a name="line.148"></a>
+<span class="sourceLineNo">149</span>              ((ByteBufferExtendedCell) left).getQualifierPosition(),<a name="line.149"></a>
+<span class="sourceLineNo">150</span>              left.getQualifierLength(), ((ByteBufferExtendedCell) right).getQualifierByteBuffer(),<a name="line.150"></a>
+<span class="sourceLineNo">151</span>              ((ByteBufferExtendedCell) right).getQualifierPosition(),<a name="line.151"></a>
+<span class="sourceLineNo">152</span>              right.getQualifierLength());<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    if (left instanceof ByteBufferExtendedCell) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getQualifierByteBuffer(),<a name="line.155"></a>
+<span class="sourceLineNo">156</span>          ((ByteBufferExtendedCell) left).getQualifierPosition(), left.getQualifierLength(),<a name="line.156"></a>
+<span class="sourceLineNo">157</span>          right.getQualifierArray(), right.getQualifierOffset(), right.getQualifierLength());<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    if (right instanceof ByteBufferExtendedCell) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      // Notice how we flip the order of the compare here. We used to negate the return value but<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      // see what FindBugs says<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      // http://findbugs.sourceforge.net/bugDescriptions.html#RV_NEGATING_RESULT_OF_COMPARETO<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      // It suggest flipping the order to get same effect and 'safer'.<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      return ByteBufferUtils.compareTo(left.getQualifierArray(),<a name="line.164"></a>
+<span class="sourceLineNo">165</span>          left.getQualifierOffset(), left.getQualifierLength(),<a name="line.165"></a>
+<span class="sourceLineNo">166</span>          ((ByteBufferExtendedCell)right).getQualifierByteBuffer(),<a name="line.166"></a>
+<span class="sourceLineNo">167</span>          ((ByteBufferExtendedCell)right).getQualifierPosition(), right.getQualifierLength());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    return Bytes.compareTo(left.getQualifierArray(), left.getQualifierOffset(),<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        left.getQualifierLength(), right.getQualifierArray(), right.getQualifierOffset(),<a name="line.170"></a>
+<span class="sourceLineNo">171</span>        right.getQualifierLength());<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>  /**<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * Compares the rows of the left and right cell.<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * For the hbase:meta case this method is overridden such that it can handle hbase:meta cells.<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * The caller should ensure using the appropriate comparator for hbase:meta.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   * @return 0 if both cells are equal, 1 if left cell is bigger than right, -1 otherwise<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 int compareRows(final Cell left, final Cell right) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    return compareRows(left, left.getRowLength(), right, right.getRowLength());<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>  static int compareRows(final Cell left, int leftRowLength, final Cell right, int rightRowLength) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    // left and right can be exactly the same at the beginning of a row<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    if (left == right) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      return 0;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getRowByteBuffer(),<a name="line.191"></a>
+<span class="sourceLineNo">192</span>          ((ByteBufferExtendedCell) left).getRowPosition(), leftRowLength,<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          ((ByteBufferExtendedCell) right).getRowByteBuffer(),<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          ((ByteBufferExtendedCell) right).getRowPosition(), rightRowLength);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    if (left instanceof ByteBufferExtendedCell) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getRowByteBuffer(),<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          ((ByteBufferExtendedCell) left).getRowPosition(), leftRowLength,<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          right.getRowArray(), right.getRowOffset(), rightRowLength);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    if (right instanceof ByteBufferExtendedCell) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      // Notice how we flip the order of the compare here. We used to negate the return value but<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      // see what FindBugs says<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      // http://findbugs.sourceforge.net/bugDescriptions.html#RV_NEGATING_RESULT_OF_COMPARETO<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      // It suggest flipping the order to get same effect and 'safer'.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      return ByteBufferUtils.compareTo(left.getRowArray(), left.getRowOffset(), leftRowLength,<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          ((ByteBufferExtendedCell)right).getRowByteBuffer(),<a name="line.207"></a>
+<span class="sourceLineNo">208</span>          ((ByteBufferExtendedCell)right).getRowPosition(), rightRowLength);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    return Bytes.compareTo(left.getRowArray(), left.getRowOffset(), left.getRowLength(),<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        right.getRowArray(), right.getRowOffset(), right.getRowLength());<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  }<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>   * Compares the row part of the cell with a simple plain byte[] like the<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * stopRow in Scan. This should be used with context where for hbase:meta<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * cells the {{@link #META_COMPARATOR} should be used<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   *<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * @param left<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   *          the cell to be compared<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * @param right<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   *          the kv serialized byte[] to be compared with<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * @param roffset<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   *          the offset in the byte[]<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param rlength<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   *          the length in the byte[]<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @return 0 if both cell and the byte[] are equal, 1 if the cell is bigger<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   *         than byte[], -1 otherwise<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  @Override<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  public int compareRows(Cell left, byte[] right, int roffset, int rlength) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    if (left instanceof ByteBufferExtendedCell) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getRowByteBuffer(),<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          ((ByteBufferExtendedCell) left).getRowPosition(), left.getRowLength(), right,<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          roffset, rlength);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    return Bytes.compareTo(left.getRowArray(), left.getRowOffset(), left.getRowLength(), right,<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        roffset, rlength);<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 final int compareWithoutRow(final Cell left, final Cell right) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    // If the column is not specified, the "minimum" key type appears the<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    // latest in the sorted order, regardless of the timestamp. This is used<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    // for specifying the last key/value in a given row, because there is no<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    // "lexicographically last column" (it would be infinitely long). The<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    // "maximum" key type does not need this behavior.<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    // Copied from KeyValue. This is bad in that we can't do memcmp w/ special rules like this.<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    int lFamLength = left.getFamilyLength();<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    int rFamLength = right.getFamilyLength();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    int lQualLength = left.getQualifierLength();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    int rQualLength = right.getQualifierLength();<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    if (lFamLength + lQualLength == 0<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          &amp;&amp; left.getTypeByte() == Type.Minimum.getCode()) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      // left is "bigger", i.e. it appears later in the sorted order<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      return 1;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    if (rFamLength + rQualLength == 0<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        &amp;&amp; right.getTypeByte() == Type.Minimum.getCode()) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      return -1;<a name="line.260"></a>
 <span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getRowByteBuffer(),<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          ((ByteBufferExtendedCell) left).getRowPosition(), leftRowLength,<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          ((ByteBufferExtendedCell) right).getRowByteBuffer(),<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          ((ByteBufferExtendedCell) right).getRowPosition(), rightRowLength);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    if (left instanceof ByteBufferExtendedCell) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getRowByteBuffer(),<a name="line.269"></a>
-<span class="sourceLineNo">270</span>          ((ByteBufferExtendedCell) left).getRowPosition(), leftRowLength,<a name="line.270"></a>
-<span class="sourceLineNo">271</span>          right.getRowArray(), right.getRowOffset(), rightRowLength);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (right instanceof ByteBufferExtendedCell) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      // Notice how we flip the order of the compare here. We used to negate the return value but<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      // see what FindBugs says<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      // http://findbugs.sourceforge.net/bugDescriptions.html#RV_NEGATING_RESULT_OF_COMPARETO<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      // It suggest flipping the order to get same effect and 'safer'.<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      return ByteBufferUtils.compareTo(left.getRowArray(), left.getRowOffset(), leftRowLength,<a name="line.278"></a>
-<span class="sourceLineNo">279</span>          ((ByteBufferExtendedCell)right).getRowByteBuffer(),<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          ((ByteBufferExtendedCell)right).getRowPosition(), rightRowLength);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    return Bytes.compareTo(left.getRowArray(), left.getRowOffset(), left.getRowLength(),<a name="line.282"></a>
-<span class="sourceLineNo">283</span>        right.getRowArray(), right.getRowOffset(), right.getRowLength());<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>   * Compares the row part of the cell with a simple plain byte[] like the<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * stopRow in Scan. This should be used with context where for hbase:meta<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * cells the {{@link #META_COMPARATOR} should be used<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   *<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * @param left<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   *          the cell to be compared<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * @param right<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   *          the kv serialized byte[] to be compared with<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * @param roffset<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   *          the offset in the byte[]<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @param rlength<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   *          the length in the byte[]<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * @return 0 if both cell and the byte[] are equal, 1 if the cell is bigger<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   *         than byte[], -1 otherwise<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 int compareRows(Cell left, byte[] right, int roffset, int rlength) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    if (left instanceof ByteBufferExtendedCell) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      return ByteBufferUtils.compareTo(((ByteBufferExtendedCell) left).getRowByteBuffer(),<a name="line.305"></a>
-<span class="sourceLineNo">306</span>          ((ByteBufferExtendedCell) left).getRowPosition(), left.getRowLength(), right,<a name="line.306"></a>
-<span class="sourceLineNo">307</span>          roffset, rlength);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    return Bytes.compareTo(left.getRowArray(), left.getRowOffset(), left.getRowLength(), right,<a name="line.309"></a>
-<span class="sourceLineNo">310</span>        roffset, rlength);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  }<a name="line.311"></a>
+<span class="sourceLineNo">262</span>    if (lFamLength != rFamLength) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      // comparing column family is enough.<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      return compareFamilies(left, right);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    // Compare cf:qualifier<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    int diff = compareColumns(left, right);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    if (diff != 0) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      return diff;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>    diff = compareTimestamps(left.getTimestamp(), right.getTimestamp());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    if (diff != 0) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      return diff;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    // Compare types. Let the delete types sort ahead of puts; i.e. types<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    // of higher numbers sort before those of lesser numbers. Maximum (255)<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // appears ahead of everything, and minimum (0) appears after<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    // everything.<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    return (0xff &amp; right.getTypeByte()) - (0xff &amp; left.getTypeByte());<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>  @Override<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  public int compareTimestamps(final Cell left, final Cell right) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    return compareTimestamps(left.getTimestamp(), right.getTimestamp());<a name="line.286"></a>
+<span class="sourceLineNo">287</span>  }<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>  @Override<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public int compareTimestamps(final long ltimestamp, final long rtimestamp) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    // Swap order we pass into compare so we get DESCENDING order.<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return Long.compare(rtimestamp, ltimestamp);<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>   * A {@link CellComparatorImpl} for &lt;code&gt;hbase:meta&lt;/code&gt; catalog table<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   * {@link KeyValue}s.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   */<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  public static class MetaCellComparator extends CellComparatorImpl {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    // TODO: Do we need a ByteBufferKeyValue version of this?<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    @Override<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    public int compareRows(final Cell left, final Cell right) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      return compareRows(left.getRowArray(), left.getRowOffset(), left.getRowLength(),<a name="line.303"></a>
+<span class="sourceLineNo">304</span>          right.getRowArray(), right.getRowOffset(), right.getRowLength());<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 int compareRows(Cell left, byte[] right, int roffset, int rlength) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      return compareRows(left.getRowArray(), left.getRowOffset(), left.getRowLength(), right,<a name="line.309"></a>
+<span class="sourceLineNo">310</span>          roffset, rlength);<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 final int compareWithoutRow(final Cell left, final Cell right) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    // If the column is not specified, the "minimum" key type appears the<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    // latest in the sorted order, regardless of the timestamp. This is used<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    // for specifying the last key/value in a given row, because there is no<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    // "lexicographically last column" (it would be infinitely long). The<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    // "maximum" key type does not need this behavior.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    // Copied from KeyValue. This is bad in that we can't do memcmp w/ special rules like this.<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    int lFamLength = left.getFamilyLength();<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    int rFamLength = right.getFamilyLength();<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    int lQualLength = left.getQualifierLength();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    int rQualLength = right.getQualifierLength();<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    if (lFamLength + lQualLength == 0<a name="line.325"></a>
-<span class="sourceLineNo">326</span>          &amp;&amp; left.getTypeByte() == Type.Minimum.getCode()) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      // left is "bigger", i.e. it appears later in the sorted order<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      return 1;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    if (rFamLength + rQualLength == 0<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        &amp;&amp; right.getTypeByte() == Type.Minimum.getCode()) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      return -1;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    if (lFamLength != rFamLength) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      // comparing column family is enough.<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      return compareFamilies(left, right);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    // Compare cf:qualifier<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    int diff = compareColumns(left, right);<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    if (diff != 0) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      return diff;<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>    diff = compareTimestamps(left, right);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    if (diff != 0) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      return diff;<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>    // Compare types. Let the delete types sort ahead of puts; i.e. types<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    // of higher numbers sort before those of lesser numbers. Maximum (255)<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    // appears ahead of everything, and minimum (0) appears after<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    // everything.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    return (0xff &amp; right.getTypeByte()) - (0xff &amp; left.getTypeByte());<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>  @Override<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  public int compareTimestamps(final Cell left, final Cell right) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    return compareTimestampsInternal(left.getTimestamp(), right.getTimestamp());<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>  @Override<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  public int compareTimestamps(final long ltimestamp, final long rtimestamp) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    return compareTimestampsInternal(ltimestamp, rtimestamp);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  }<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>  private static final int compareTimestampsInternal(final long ltimestamp, final long rtimestamp) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    // Swap the times so sort is newest to oldest, descending.<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    return Long.compare(rtimestamp, ltimestamp);<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>   * A {@link CellComparatorImpl} for &lt;code&gt;hbase:meta&lt;/code&gt; catalog table<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * {@link KeyValue}s.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   */<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  public static class MetaCellComparator extends CellComparatorImpl {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    @Override<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    public int compareRows(final Cell left, final Cell right) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      return compareRows(left.getRowArray(), left.getRowOffset(), left.getRowLength(),<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          right.getRowArray(), right.getRowOffset(), right.getRowLength());<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 int compareRows(Cell left, byte[] right, int roffset, int rlength) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return compareRows(left.getRowArray(), left.getRowOffset(), left.getRowLength(), right,<a name="line.384"></a>
-<span class="sourceLineNo">385</span>          roffset, rlength);<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 int compare(final Cell a, final Cell b, boolean ignoreSequenceid) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      int diff = compareRows(a, b);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      if (diff != 0) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        return diff;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>      diff = compareWithoutRow(a, b);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      if (diff != 0) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        return diff;<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>      // Negate following comparisons so later edits show up first mvccVersion: later sorts first<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      return ignoreSequenceid? diff: Longs.compare(b.getSequenceId(), a.getSequenceId());<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>    private static int compareRows(byte[] left, int loffset, int llength, byte[] right, int roffset,<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        int rlength) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      int leftDelimiter = Bytes.searchDelimiterIndex(left, loffset, llength, HConstants.DELIMITER);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      int rightDelimiter = Bytes<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          .searchDelimiterIndex(right, roffset, rlength, HConstants.DELIMITER);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      // Compare up to the delimiter<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      int lpart = (leftDelimiter &lt; 0 ? llength : leftDelimiter - loffset);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      int rpart = (rightDelimiter &lt; 0 ? rlength : rightDelimiter - roffset);<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      int result = Bytes.compareTo(left, loffset, lpart, right, roffset, rpart);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      if (result != 0) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        return result;<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      } else {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &gt;= 0) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          return -1;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        } else if (rightDelimiter &lt; 0 &amp;&amp; leftDelimiter &gt;= 0) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          return 1;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        } else if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &lt; 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          return 0;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      }<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      // Compare middle bit of the row.<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      // Move past delimiter<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      leftDelimiter++;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      rightDelimiter++;<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      int leftFarDelimiter = Bytes.searchDelimiterIndexInReverse(left, leftDelimiter, llength<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          - (leftDelimiter - loffset), HConstants.DELIMITER);<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      int rightFarDelimiter = Bytes.searchDelimiterIndexInReverse(right, rightDelimiter, rlength<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          - (rightDelimiter - roffset), HConstants.DELIMITER);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      // Now compare middlesection of row.<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      lpart = (leftFarDelimiter &lt; 0 ? llength + loffset : leftFarDelimiter) - leftDelimiter;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      rpart = (rightFarDelimiter &lt; 0 ? rlength + roffset : rightFarDelimiter) - rightDelimiter;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      result = Bytes.compareTo(left, leftDelimiter, lpart, right, rightDelimiter, rpart);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      if (result != 0) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        return result;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      } else {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &gt;= 0) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>          return -1;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        } else if (rightDelimiter &lt; 0 &amp;&amp; leftDelimiter &gt;= 0) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>          return 1;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        } else if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &lt; 0) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          return 0;<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>      // Compare last part of row, the rowid.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      leftFarDelimiter++;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      rightFarDelimiter++;<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      result = Bytes.compareTo(left, leftFarDelimiter, llength - (leftFarDelimiter - loffset),<a name="line.450"></a>
-<span class="sourceLineNo">451</span>          right, rightFarDelimiter, rlength - (rightFarDelimiter - roffset));<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      return result;<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    }<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
-<span class="sourceLineNo">455</span>}<a name="line.455"></a>
+<span class="sourceLineNo">313</span>    @Override<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    public int compare(final Cell a, final Cell b, boolean ignoreSequenceid) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      int diff = compareRows(a, b);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      if (diff != 0) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        return diff;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>      diff = compareWithoutRow(a, b);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      if (diff != 0) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        return diff;<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>      // Negate following comparisons so later edits show up first mvccVersion: later sorts first<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      return ignoreSequenceid? diff: Longs.compare(b.getSequenceId(), a.getSequenceId());<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>    private static int compareRows(byte[] left, int loffset, int llength, byte[] right, int roffset,<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        int rlength) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      int leftDelimiter = Bytes.searchDelimiterIndex(left, loffset, llength, HConstants.DELIMITER);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      int rightDelimiter = Bytes<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          .searchDelimiterIndex(right, roffset, rlength, HConstants.DELIMITER);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      // Compare up to the delimiter<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      int lpart = (leftDelimiter &lt; 0 ? llength : leftDelimiter - loffset);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      int rpart = (rightDelimiter &lt; 0 ? rlength : rightDelimiter - roffset);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      int result = Bytes.compareTo(left, loffset, lpart, right, roffset, rpart);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      if (result != 0) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        return result;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      } else {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &gt;= 0) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>          return -1;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        } else if (rightDelimiter &lt; 0 &amp;&amp; leftDelimiter &gt;= 0) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>          return 1;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        } else if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &lt; 0) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>          return 0;<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>      // Compare middle bit of the row.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      // Move past delimiter<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      leftDelimiter++;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      rightDelimiter++;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      int leftFarDelimiter = Bytes.searchDelimiterIndexInReverse(left, leftDelimiter, llength<a name="line.353"></a>
+<span class="sourceLineNo">354</span>          - (leftDelimiter - loffset), HConstants.DELIMITER);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      int rightFarDelimiter = Bytes.searchDelimiterIndexInReverse(right, rightDelimiter, rlength<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          - (rightDelimiter - roffset), HConstants.DELIMITER);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      // Now compare middlesection of row.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      lpart = (leftFarDelimiter &lt; 0 ? llength + loffset : leftFarDelimiter) - leftDelimiter;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      rpart = (rightFarDelimiter &lt; 0 ? rlength + roffset : rightFarDelimiter) - rightDelimiter;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      result = Bytes.compareTo(left, leftDelimiter, lpart, right, rightDelimiter, rpart);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      if (result != 0) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        return result;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      } else {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &gt;= 0) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>          return -1;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        } else if (rightDelimiter &lt; 0 &amp;&amp; leftDelimiter &gt;= 0) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>          return 1;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        } else if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &lt; 0) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          return 0;<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>      // Compare last part of row, the rowid.<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      leftFarDelimiter++;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      rightFarDelimiter++;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      result = Bytes.compareTo(left, leftFarDelimiter, llength - (leftFarDelimiter - loffset),<a name="line.375"></a>
+<span class="sourceLineNo">376</span>          right, rightFarDelimiter, rlength - (rightFarDelimiter - roffset));<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      return result;<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 Comparator getSimpleComparator() {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      return this;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    }<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>  @Override<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  public Comparator getSimpleComparator() {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    return new BBKVComparator(this);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>}<a name="line.390"></a>
 
 
 


[08/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.ByteArrayComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.ByteArrayComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.ByteArrayComparator.html
index a242321..b2c1cc6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.ByteArrayComparator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.ByteArrayComparator.html
@@ -1557,7 +1557,7 @@
 <span class="sourceLineNo">1549</span>          long lw = theUnsafe.getLong(buffer1, offset1Adj + i);<a name="line.1549"></a>
 <span class="sourceLineNo">1550</span>          long rw = theUnsafe.getLong(buffer2, offset2Adj + i);<a name="line.1550"></a>
 <span class="sourceLineNo">1551</span>          if (lw != rw) {<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.littleEndian) {<a name="line.1552"></a>
+<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.LITTLE_ENDIAN) {<a name="line.1552"></a>
 <span class="sourceLineNo">1553</span>              return ((lw + Long.MIN_VALUE) &lt; (rw + Long.MIN_VALUE)) ? -1 : 1;<a name="line.1553"></a>
 <span class="sourceLineNo">1554</span>            }<a name="line.1554"></a>
 <span class="sourceLineNo">1555</span><a name="line.1555"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.Comparer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.Comparer.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.Comparer.html
index a242321..b2c1cc6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.Comparer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.Comparer.html
@@ -1557,7 +1557,7 @@
 <span class="sourceLineNo">1549</span>          long lw = theUnsafe.getLong(buffer1, offset1Adj + i);<a name="line.1549"></a>
 <span class="sourceLineNo">1550</span>          long rw = theUnsafe.getLong(buffer2, offset2Adj + i);<a name="line.1550"></a>
 <span class="sourceLineNo">1551</span>          if (lw != rw) {<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.littleEndian) {<a name="line.1552"></a>
+<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.LITTLE_ENDIAN) {<a name="line.1552"></a>
 <span class="sourceLineNo">1553</span>              return ((lw + Long.MIN_VALUE) &lt; (rw + Long.MIN_VALUE)) ? -1 : 1;<a name="line.1553"></a>
 <span class="sourceLineNo">1554</span>            }<a name="line.1554"></a>
 <span class="sourceLineNo">1555</span><a name="line.1555"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html
index a242321..b2c1cc6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html
@@ -1557,7 +1557,7 @@
 <span class="sourceLineNo">1549</span>          long lw = theUnsafe.getLong(buffer1, offset1Adj + i);<a name="line.1549"></a>
 <span class="sourceLineNo">1550</span>          long rw = theUnsafe.getLong(buffer2, offset2Adj + i);<a name="line.1550"></a>
 <span class="sourceLineNo">1551</span>          if (lw != rw) {<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.littleEndian) {<a name="line.1552"></a>
+<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.LITTLE_ENDIAN) {<a name="line.1552"></a>
 <span class="sourceLineNo">1553</span>              return ((lw + Long.MIN_VALUE) &lt; (rw + Long.MIN_VALUE)) ? -1 : 1;<a name="line.1553"></a>
 <span class="sourceLineNo">1554</span>            }<a name="line.1554"></a>
 <span class="sourceLineNo">1555</span><a name="line.1555"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html
index a242321..b2c1cc6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html
@@ -1557,7 +1557,7 @@
 <span class="sourceLineNo">1549</span>          long lw = theUnsafe.getLong(buffer1, offset1Adj + i);<a name="line.1549"></a>
 <span class="sourceLineNo">1550</span>          long rw = theUnsafe.getLong(buffer2, offset2Adj + i);<a name="line.1550"></a>
 <span class="sourceLineNo">1551</span>          if (lw != rw) {<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.littleEndian) {<a name="line.1552"></a>
+<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.LITTLE_ENDIAN) {<a name="line.1552"></a>
 <span class="sourceLineNo">1553</span>              return ((lw + Long.MIN_VALUE) &lt; (rw + Long.MIN_VALUE)) ? -1 : 1;<a name="line.1553"></a>
 <span class="sourceLineNo">1554</span>            }<a name="line.1554"></a>
 <span class="sourceLineNo">1555</span><a name="line.1555"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.html
index a242321..b2c1cc6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.html
@@ -1557,7 +1557,7 @@
 <span class="sourceLineNo">1549</span>          long lw = theUnsafe.getLong(buffer1, offset1Adj + i);<a name="line.1549"></a>
 <span class="sourceLineNo">1550</span>          long rw = theUnsafe.getLong(buffer2, offset2Adj + i);<a name="line.1550"></a>
 <span class="sourceLineNo">1551</span>          if (lw != rw) {<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.littleEndian) {<a name="line.1552"></a>
+<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.LITTLE_ENDIAN) {<a name="line.1552"></a>
 <span class="sourceLineNo">1553</span>              return ((lw + Long.MIN_VALUE) &lt; (rw + Long.MIN_VALUE)) ? -1 : 1;<a name="line.1553"></a>
 <span class="sourceLineNo">1554</span>            }<a name="line.1554"></a>
 <span class="sourceLineNo">1555</span><a name="line.1555"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.RowEndKeyComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.RowEndKeyComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.RowEndKeyComparator.html
index a242321..b2c1cc6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.RowEndKeyComparator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.RowEndKeyComparator.html
@@ -1557,7 +1557,7 @@
 <span class="sourceLineNo">1549</span>          long lw = theUnsafe.getLong(buffer1, offset1Adj + i);<a name="line.1549"></a>
 <span class="sourceLineNo">1550</span>          long rw = theUnsafe.getLong(buffer2, offset2Adj + i);<a name="line.1550"></a>
 <span class="sourceLineNo">1551</span>          if (lw != rw) {<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.littleEndian) {<a name="line.1552"></a>
+<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.LITTLE_ENDIAN) {<a name="line.1552"></a>
 <span class="sourceLineNo">1553</span>              return ((lw + Long.MIN_VALUE) &lt; (rw + Long.MIN_VALUE)) ? -1 : 1;<a name="line.1553"></a>
 <span class="sourceLineNo">1554</span>            }<a name="line.1554"></a>
 <span class="sourceLineNo">1555</span><a name="line.1555"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.html
index a242321..b2c1cc6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/Bytes.html
@@ -1557,7 +1557,7 @@
 <span class="sourceLineNo">1549</span>          long lw = theUnsafe.getLong(buffer1, offset1Adj + i);<a name="line.1549"></a>
 <span class="sourceLineNo">1550</span>          long rw = theUnsafe.getLong(buffer2, offset2Adj + i);<a name="line.1550"></a>
 <span class="sourceLineNo">1551</span>          if (lw != rw) {<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.littleEndian) {<a name="line.1552"></a>
+<span class="sourceLineNo">1552</span>            if(!UnsafeAccess.LITTLE_ENDIAN) {<a name="line.1552"></a>
 <span class="sourceLineNo">1553</span>              return ((lw + Long.MIN_VALUE) &lt; (rw + Long.MIN_VALUE)) ? -1 : 1;<a name="line.1553"></a>
 <span class="sourceLineNo">1554</span>            }<a name="line.1554"></a>
 <span class="sourceLineNo">1555</span><a name="line.1555"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/util/UnsafeAccess.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/UnsafeAccess.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/UnsafeAccess.html
index 0970a24..4a8cf3e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/UnsafeAccess.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/UnsafeAccess.html
@@ -50,7 +50,7 @@
 <span class="sourceLineNo">042</span>  /** The offset to the first element in a byte array. */<a name="line.42"></a>
 <span class="sourceLineNo">043</span>  public static final long BYTE_ARRAY_BASE_OFFSET;<a name="line.43"></a>
 <span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>  static final boolean littleEndian = ByteOrder.nativeOrder()<a name="line.45"></a>
+<span class="sourceLineNo">045</span>  public static final boolean LITTLE_ENDIAN = ByteOrder.nativeOrder()<a name="line.45"></a>
 <span class="sourceLineNo">046</span>      .equals(ByteOrder.LITTLE_ENDIAN);<a name="line.46"></a>
 <span class="sourceLineNo">047</span><a name="line.47"></a>
 <span class="sourceLineNo">048</span>  // This number limits the number of bytes to copy per call to Unsafe's<a name="line.48"></a>
@@ -89,7 +89,7 @@
 <span class="sourceLineNo">081</span>   * @return the short value<a name="line.81"></a>
 <span class="sourceLineNo">082</span>   */<a name="line.82"></a>
 <span class="sourceLineNo">083</span>  public static short toShort(byte[] bytes, int offset) {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    if (littleEndian) {<a name="line.84"></a>
+<span class="sourceLineNo">084</span>    if (LITTLE_ENDIAN) {<a name="line.84"></a>
 <span class="sourceLineNo">085</span>      return Short.reverseBytes(theUnsafe.getShort(bytes, offset + BYTE_ARRAY_BASE_OFFSET));<a name="line.85"></a>
 <span class="sourceLineNo">086</span>    } else {<a name="line.86"></a>
 <span class="sourceLineNo">087</span>      return theUnsafe.getShort(bytes, offset + BYTE_ARRAY_BASE_OFFSET);<a name="line.87"></a>
@@ -103,7 +103,7 @@
 <span class="sourceLineNo">095</span>   * @return the int value<a name="line.95"></a>
 <span class="sourceLineNo">096</span>   */<a name="line.96"></a>
 <span class="sourceLineNo">097</span>  public static int toInt(byte[] bytes, int offset) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    if (littleEndian) {<a name="line.98"></a>
+<span class="sourceLineNo">098</span>    if (LITTLE_ENDIAN) {<a name="line.98"></a>
 <span class="sourceLineNo">099</span>      return Integer.reverseBytes(theUnsafe.getInt(bytes, offset + BYTE_ARRAY_BASE_OFFSET));<a name="line.99"></a>
 <span class="sourceLineNo">100</span>    } else {<a name="line.100"></a>
 <span class="sourceLineNo">101</span>      return theUnsafe.getInt(bytes, offset + BYTE_ARRAY_BASE_OFFSET);<a name="line.101"></a>
@@ -117,7 +117,7 @@
 <span class="sourceLineNo">109</span>   * @return the long value<a name="line.109"></a>
 <span class="sourceLineNo">110</span>   */<a name="line.110"></a>
 <span class="sourceLineNo">111</span>  public static long toLong(byte[] bytes, int offset) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    if (littleEndian) {<a name="line.112"></a>
+<span class="sourceLineNo">112</span>    if (LITTLE_ENDIAN) {<a name="line.112"></a>
 <span class="sourceLineNo">113</span>      return Long.reverseBytes(theUnsafe.getLong(bytes, offset + BYTE_ARRAY_BASE_OFFSET));<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    } else {<a name="line.114"></a>
 <span class="sourceLineNo">115</span>      return theUnsafe.getLong(bytes, offset + BYTE_ARRAY_BASE_OFFSET);<a name="line.115"></a>
@@ -133,7 +133,7 @@
 <span class="sourceLineNo">125</span>   * @return incremented offset<a name="line.125"></a>
 <span class="sourceLineNo">126</span>   */<a name="line.126"></a>
 <span class="sourceLineNo">127</span>  public static int putShort(byte[] bytes, int offset, short val) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    if (littleEndian) {<a name="line.128"></a>
+<span class="sourceLineNo">128</span>    if (LITTLE_ENDIAN) {<a name="line.128"></a>
 <span class="sourceLineNo">129</span>      val = Short.reverseBytes(val);<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    }<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    theUnsafe.putShort(bytes, offset + BYTE_ARRAY_BASE_OFFSET, val);<a name="line.131"></a>
@@ -148,7 +148,7 @@
 <span class="sourceLineNo">140</span>   * @return incremented offset<a name="line.140"></a>
 <span class="sourceLineNo">141</span>   */<a name="line.141"></a>
 <span class="sourceLineNo">142</span>  public static int putInt(byte[] bytes, int offset, int val) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    if (littleEndian) {<a name="line.143"></a>
+<span class="sourceLineNo">143</span>    if (LITTLE_ENDIAN) {<a name="line.143"></a>
 <span class="sourceLineNo">144</span>      val = Integer.reverseBytes(val);<a name="line.144"></a>
 <span class="sourceLineNo">145</span>    }<a name="line.145"></a>
 <span class="sourceLineNo">146</span>    theUnsafe.putInt(bytes, offset + BYTE_ARRAY_BASE_OFFSET, val);<a name="line.146"></a>
@@ -163,7 +163,7 @@
 <span class="sourceLineNo">155</span>   * @return incremented offset<a name="line.155"></a>
 <span class="sourceLineNo">156</span>   */<a name="line.156"></a>
 <span class="sourceLineNo">157</span>  public static int putLong(byte[] bytes, int offset, long val) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    if (littleEndian) {<a name="line.158"></a>
+<span class="sourceLineNo">158</span>    if (LITTLE_ENDIAN) {<a name="line.158"></a>
 <span class="sourceLineNo">159</span>      val = Long.reverseBytes(val);<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></a>
 <span class="sourceLineNo">161</span>    theUnsafe.putLong(bytes, offset + BYTE_ARRAY_BASE_OFFSET, val);<a name="line.161"></a>
@@ -180,7 +180,7 @@
 <span class="sourceLineNo">172</span>   * @return short value at offset<a name="line.172"></a>
 <span class="sourceLineNo">173</span>   */<a name="line.173"></a>
 <span class="sourceLineNo">174</span>  public static short toShort(ByteBuffer buf, int offset) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    if (littleEndian) {<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    if (LITTLE_ENDIAN) {<a name="line.175"></a>
 <span class="sourceLineNo">176</span>      return Short.reverseBytes(getAsShort(buf, offset));<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>    return getAsShort(buf, offset);<a name="line.178"></a>
@@ -194,7 +194,7 @@
 <span class="sourceLineNo">186</span>   * @return short value at offset<a name="line.186"></a>
 <span class="sourceLineNo">187</span>   */<a name="line.187"></a>
 <span class="sourceLineNo">188</span>  public static short toShort(Object ref, long offset) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    if (littleEndian) {<a name="line.189"></a>
+<span class="sourceLineNo">189</span>    if (LITTLE_ENDIAN) {<a name="line.189"></a>
 <span class="sourceLineNo">190</span>      return Short.reverseBytes(theUnsafe.getShort(ref, offset));<a name="line.190"></a>
 <span class="sourceLineNo">191</span>    }<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    return theUnsafe.getShort(ref, offset);<a name="line.192"></a>
@@ -222,7 +222,7 @@
 <span class="sourceLineNo">214</span>   * @return int value at offset<a name="line.214"></a>
 <span class="sourceLineNo">215</span>   */<a name="line.215"></a>
 <span class="sourceLineNo">216</span>  public static int toInt(ByteBuffer buf, int offset) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    if (littleEndian) {<a name="line.217"></a>
+<span class="sourceLineNo">217</span>    if (LITTLE_ENDIAN) {<a name="line.217"></a>
 <span class="sourceLineNo">218</span>      return Integer.reverseBytes(getAsInt(buf, offset));<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    }<a name="line.219"></a>
 <span class="sourceLineNo">220</span>    return getAsInt(buf, offset);<a name="line.220"></a>
@@ -236,7 +236,7 @@
 <span class="sourceLineNo">228</span>   * @return int value at offset<a name="line.228"></a>
 <span class="sourceLineNo">229</span>   */<a name="line.229"></a>
 <span class="sourceLineNo">230</span>  public static int toInt(Object ref, long offset) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    if (littleEndian) {<a name="line.231"></a>
+<span class="sourceLineNo">231</span>    if (LITTLE_ENDIAN) {<a name="line.231"></a>
 <span class="sourceLineNo">232</span>      return Integer.reverseBytes(theUnsafe.getInt(ref, offset));<a name="line.232"></a>
 <span class="sourceLineNo">233</span>    }<a name="line.233"></a>
 <span class="sourceLineNo">234</span>    return theUnsafe.getInt(ref, offset);<a name="line.234"></a>
@@ -264,7 +264,7 @@
 <span class="sourceLineNo">256</span>   * @return long value at offset<a name="line.256"></a>
 <span class="sourceLineNo">257</span>   */<a name="line.257"></a>
 <span class="sourceLineNo">258</span>  public static long toLong(ByteBuffer buf, int offset) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    if (littleEndian) {<a name="line.259"></a>
+<span class="sourceLineNo">259</span>    if (LITTLE_ENDIAN) {<a name="line.259"></a>
 <span class="sourceLineNo">260</span>      return Long.reverseBytes(getAsLong(buf, offset));<a name="line.260"></a>
 <span class="sourceLineNo">261</span>    }<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    return getAsLong(buf, offset);<a name="line.262"></a>
@@ -278,7 +278,7 @@
 <span class="sourceLineNo">270</span>   * @return long value at offset<a name="line.270"></a>
 <span class="sourceLineNo">271</span>   */<a name="line.271"></a>
 <span class="sourceLineNo">272</span>  public static long toLong(Object ref, long offset) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (littleEndian) {<a name="line.273"></a>
+<span class="sourceLineNo">273</span>    if (LITTLE_ENDIAN) {<a name="line.273"></a>
 <span class="sourceLineNo">274</span>      return Long.reverseBytes(theUnsafe.getLong(ref, offset));<a name="line.274"></a>
 <span class="sourceLineNo">275</span>    }<a name="line.275"></a>
 <span class="sourceLineNo">276</span>    return theUnsafe.getLong(ref, offset);<a name="line.276"></a>
@@ -305,7 +305,7 @@
 <span class="sourceLineNo">297</span>   * @return incremented offset<a name="line.297"></a>
 <span class="sourceLineNo">298</span>   */<a name="line.298"></a>
 <span class="sourceLineNo">299</span>  public static int putInt(ByteBuffer buf, int offset, int val) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    if (littleEndian) {<a name="line.300"></a>
+<span class="sourceLineNo">300</span>    if (LITTLE_ENDIAN) {<a name="line.300"></a>
 <span class="sourceLineNo">301</span>      val = Integer.reverseBytes(val);<a name="line.301"></a>
 <span class="sourceLineNo">302</span>    }<a name="line.302"></a>
 <span class="sourceLineNo">303</span>    if (buf.isDirect()) {<a name="line.303"></a>
@@ -410,7 +410,7 @@
 <span class="sourceLineNo">402</span>   * @return incremented offset<a name="line.402"></a>
 <span class="sourceLineNo">403</span>   */<a name="line.403"></a>
 <span class="sourceLineNo">404</span>  public static int putShort(ByteBuffer buf, int offset, short val) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    if (littleEndian) {<a name="line.405"></a>
+<span class="sourceLineNo">405</span>    if (LITTLE_ENDIAN) {<a name="line.405"></a>
 <span class="sourceLineNo">406</span>      val = Short.reverseBytes(val);<a name="line.406"></a>
 <span class="sourceLineNo">407</span>    }<a name="line.407"></a>
 <span class="sourceLineNo">408</span>    if (buf.isDirect()) {<a name="line.408"></a>
@@ -429,7 +429,7 @@
 <span class="sourceLineNo">421</span>   * @return incremented offset<a name="line.421"></a>
 <span class="sourceLineNo">422</span>   */<a name="line.422"></a>
 <span class="sourceLineNo">423</span>  public static int putLong(ByteBuffer buf, int offset, long val) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    if (littleEndian) {<a name="line.424"></a>
+<span class="sourceLineNo">424</span>    if (LITTLE_ENDIAN) {<a name="line.424"></a>
 <span class="sourceLineNo">425</span>      val = Long.reverseBytes(val);<a name="line.425"></a>
 <span class="sourceLineNo">426</span>    }<a name="line.426"></a>
 <span class="sourceLineNo">427</span>    if (buf.isDirect()) {<a name="line.427"></a>


[09/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html
index efd186d..30a1259 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html
@@ -58,1008 +58,1012 @@
 <span class="sourceLineNo">050</span>  public final static int NEXT_BIT_MASK = 1 &lt;&lt; 7;<a name="line.50"></a>
 <span class="sourceLineNo">051</span>  @VisibleForTesting<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  final static boolean UNSAFE_AVAIL = UnsafeAvailChecker.isAvailable();<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  @VisibleForTesting<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  final static boolean UNSAFE_UNALIGNED = UnsafeAvailChecker.unaligned();<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private ByteBufferUtils() {<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  }<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  /**<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   * Similar to {@link WritableUtils#writeVLong(java.io.DataOutput, long)},<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   * but writes to a {@link ByteBuffer}.<a name="line.61"></a>
-<span class="sourceLineNo">062</span>   */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static void writeVLong(ByteBuffer out, long i) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    if (i &gt;= -112 &amp;&amp; i &lt;= 127) {<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      out.put((byte) i);<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      return;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    }<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>    int len = -112;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    if (i &lt; 0) {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      i ^= -1L; // take one's complement<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      len = -120;<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>    long tmp = i;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    while (tmp != 0) {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      tmp = tmp &gt;&gt; 8;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      len--;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    }<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>    out.put((byte) len);<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>    len = (len &lt; -120) ? -(len + 120) : -(len + 112);<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>    for (int idx = len; idx != 0; idx--) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      int shiftbits = (idx - 1) * 8;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      long mask = 0xFFL &lt;&lt; shiftbits;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      out.put((byte) ((i &amp; mask) &gt;&gt; shiftbits));<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    }<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>   * Similar to {@link WritableUtils#readVLong(DataInput)} but reads from a<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * {@link ByteBuffer}.<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   */<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  public static long readVLong(ByteBuffer in) {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    byte firstByte = in.get();<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    int len = WritableUtils.decodeVIntSize(firstByte);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    if (len == 1) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      return firstByte;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    }<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    long i = 0;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    for (int idx = 0; idx &lt; len-1; idx++) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      byte b = in.get();<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      i = i &lt;&lt; 8;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      i = i | (b &amp; 0xFF);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    return (WritableUtils.isNegativeVInt(firstByte) ? (i ^ -1L) : i);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
+<span class="sourceLineNo">053</span>  public final static boolean UNSAFE_UNALIGNED = UnsafeAvailChecker.unaligned();<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private ByteBufferUtils() {<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  }<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  /**<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * Similar to {@link WritableUtils#writeVLong(java.io.DataOutput, long)},<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   * but writes to a {@link ByteBuffer}.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   */<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public static void writeVLong(ByteBuffer out, long i) {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    if (i &gt;= -112 &amp;&amp; i &lt;= 127) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      out.put((byte) i);<a name="line.64"></a>
+<span class="sourceLineNo">065</span>      return;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    }<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>    int len = -112;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    if (i &lt; 0) {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      i ^= -1L; // take one's complement<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      len = -120;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    }<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>    long tmp = i;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    while (tmp != 0) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      tmp = tmp &gt;&gt; 8;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      len--;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>    out.put((byte) len);<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>    len = (len &lt; -120) ? -(len + 120) : -(len + 112);<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>    for (int idx = len; idx != 0; idx--) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      int shiftbits = (idx - 1) * 8;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      long mask = 0xFFL &lt;&lt; shiftbits;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      out.put((byte) ((i &amp; mask) &gt;&gt; shiftbits));<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><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  /**<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * Similar to {@link WritableUtils#readVLong(DataInput)} but reads from a<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * {@link ByteBuffer}.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  public static long readVLong(ByteBuffer in) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    byte firstByte = in.get();<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    int len = WritableUtils.decodeVIntSize(firstByte);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    if (len == 1) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      return firstByte;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    long i = 0;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    for (int idx = 0; idx &lt; len-1; idx++) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      byte b = in.get();<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      i = i &lt;&lt; 8;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      i = i | (b &amp; 0xFF);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    return (WritableUtils.isNegativeVInt(firstByte) ? (i ^ -1L) : i);<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><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  /**<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * Put in buffer integer using 7 bit encoding. For each written byte:<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * 7 bits are used to store value<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * 1 bit is used to indicate whether there is next bit.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param value Int to be compressed.<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * @param out Where to put compressed data<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * @return Number of bytes written.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @throws IOException on stream error<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   public static int putCompressedInt(OutputStream out, final int value)<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      throws IOException {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    int i = 0;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    int tmpvalue = value;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    do {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      byte b = (byte) (tmpvalue &amp; VALUE_MASK);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      tmpvalue &gt;&gt;&gt;= NEXT_BIT_SHIFT;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      if (tmpvalue != 0) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        b |= (byte) NEXT_BIT_MASK;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      }<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      out.write(b);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      i++;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    } while (tmpvalue != 0);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    return i;<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>    * Put in output stream 32 bit integer (Big Endian byte order).<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    * @param out Where to put integer.<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    * @param value Value of integer.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    * @throws IOException On stream error.<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    */<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   public static void putInt(OutputStream out, final int value)<a name="line.143"></a>
-<span class="sourceLineNo">144</span>       throws IOException {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>     // We have writeInt in ByteBufferOutputStream so that it can directly write<a name="line.145"></a>
-<span class="sourceLineNo">146</span>     // int to underlying<a name="line.146"></a>
-<span class="sourceLineNo">147</span>     // ByteBuffer in one step.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>     if (out instanceof ByteBufferWriter) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       ((ByteBufferWriter) out).writeInt(value);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>     } else {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>       StreamUtils.writeInt(out, value);<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>  public static byte toByte(ByteBuffer buffer, int offset) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    if (UNSAFE_AVAIL) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      return UnsafeAccess.toByte(buffer, offset);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    } else {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return buffer.get(offset);<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><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * Copy the data to the output stream and update position in buffer.<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * @param out the stream to write bytes to<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * @param in the buffer to read bytes from<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * @param length the number of bytes to copy<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   */<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  public static void moveBufferToStream(OutputStream out, ByteBuffer in,<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      int length) throws IOException {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    copyBufferToStream(out, in, in.position(), length);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    skip(in, length);<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>  /**<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * Copy data from a buffer to an output stream. Does not update the position<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * in the buffer.<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * @param out the stream to write bytes to<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * @param in the buffer to read bytes from<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * @param offset the offset in the buffer (from the buffer's array offset)<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   *      to start copying bytes from<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * @param length the number of bytes to copy<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  public static void copyBufferToStream(OutputStream out, ByteBuffer in,<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      int offset, int length) throws IOException {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    if (out instanceof ByteBufferWriter) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      ((ByteBufferWriter) out).write(in, offset, length);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    } else if (in.hasArray()) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      out.write(in.array(), in.arrayOffset() + offset, length);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    } else {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      for (int i = 0; i &lt; length; ++i) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        out.write(toByte(in, offset + i));<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>  }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>  /**<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * Copy data from a buffer to an output stream. Does not update the position<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   * in the buffer.<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * @param out the output stream to write bytes to<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * @param in the buffer to read bytes from<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * @param offset the offset in the buffer (from the buffer's array offset)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   *      to start copying bytes from<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * @param length the number of bytes to copy<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   */<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  public static void copyBufferToStream(DataOutput out, ByteBuffer in, int offset, int length)<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      throws IOException {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    if (out instanceof ByteBufferWriter) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      ((ByteBufferWriter) out).write(in, offset, length);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    } else if (in.hasArray()) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      out.write(in.array(), in.arrayOffset() + offset, length);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    } else {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      for (int i = 0; i &lt; length; ++i) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        out.write(toByte(in, offset + i));<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>  }<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>  public static int putLong(OutputStream out, final long value,<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      final int fitInBytes) throws IOException {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    long tmpValue = value;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    for (int i = 0; i &lt; fitInBytes; ++i) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      out.write((byte) (tmpValue &amp; 0xff));<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      tmpValue &gt;&gt;&gt;= 8;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    return fitInBytes;<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>  public static int putByte(ByteBuffer buffer, int offset, byte b) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    if (UNSAFE_AVAIL) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      return UnsafeAccess.putByte(buffer, offset, b);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    } else {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      buffer.put(offset, b);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      return offset + 1;<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>  /**<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * Check how many bytes are required to store value.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   * @param value Value which size will be tested.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * @return How many bytes are required to store value.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   */<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static int longFitsIn(final long value) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    if (value &lt; 0) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      return 8;<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>    if (value &lt; (1L &lt;&lt; (4 * 8))) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      // no more than 4 bytes<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      if (value &lt; (1L &lt;&lt; (2 * 8))) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        if (value &lt; (1L &lt;&lt; (1 * 8))) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          return 1;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        return 2;<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      if (value &lt; (1L &lt;&lt; (3 * 8))) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        return 3;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      return 4;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // more than 4 bytes<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    if (value &lt; (1L &lt;&lt; (6 * 8))) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      if (value &lt; (1L &lt;&lt; (5 * 8))) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        return 5;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      }<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      return 6;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    if (value &lt; (1L &lt;&lt; (7 * 8))) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      return 7;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    return 8;<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>   * Check how many bytes is required to store value.<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * @param value Value which size will be tested.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   * @return How many bytes are required to store value.<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   */<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public static int intFitsIn(final int value) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    if (value &lt; 0) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      return 4;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    if (value &lt; (1 &lt;&lt; (2 * 8))) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      if (value &lt; (1 &lt;&lt; (1 * 8))) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        return 1;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      return 2;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    if (value &lt;= (1 &lt;&lt; (3 * 8))) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      return 3;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    return 4;<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>  /**<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * Read integer from stream coded in 7 bits and increment position.<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @return the integer that has been read<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * @throws IOException<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   */<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  public static int readCompressedInt(InputStream input)<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      throws IOException {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    int result = 0;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    int i = 0;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    byte b;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    do {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      b = (byte) input.read();<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      result += (b &amp; VALUE_MASK) &lt;&lt; (NEXT_BIT_SHIFT * i);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      i++;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      if (i &gt; Bytes.SIZEOF_INT + 1) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        throw new IllegalStateException(<a name="line.311"></a>
-<span class="sourceLineNo">312</span>            "Corrupted compressed int (too long: " + (i + 1) + " bytes)");<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    } while (0 != (b &amp; NEXT_BIT_MASK));<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    return result;<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>  /**<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * Read integer from buffer coded in 7 bits and increment position.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * @return Read integer.<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   */<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  public static int readCompressedInt(ByteBuffer buffer) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    byte b = buffer.get();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    if ((b &amp; NEXT_BIT_MASK) != 0) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      return (b &amp; VALUE_MASK) + (readCompressedInt(buffer) &lt;&lt; NEXT_BIT_SHIFT);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return b &amp; VALUE_MASK;<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>  /**<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * Read long which was written to fitInBytes bytes and increment position.<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @param fitInBytes In how many bytes given long is stored.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   * @return The value of parsed long.<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   * @throws IOException<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   */<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  public static long readLong(InputStream in, final int fitInBytes)<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      throws IOException {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    long tmpLong = 0;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    for (int i = 0; i &lt; fitInBytes; ++i) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      tmpLong |= (in.read() &amp; 0xffL) &lt;&lt; (8 * i);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    return tmpLong;<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>   * Read long which was written to fitInBytes bytes and increment position.<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * @param fitInBytes In how many bytes given long is stored.<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * @return The value of parsed long.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  public static long readLong(ByteBuffer in, final int fitInBytes) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    long tmpLength = 0;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    for (int i = 0; i &lt; fitInBytes; ++i) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      tmpLength |= (in.get() &amp; 0xffL) &lt;&lt; (8L * i);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    return tmpLength;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  }<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>   * Copy the given number of bytes from the given stream and put it at the<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * current position of the given buffer, updating the position in the buffer.<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * @param out the buffer to write data to<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * @param in the stream to read data from<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   * @param length the number of bytes to read/write<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   */<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  public static void copyFromStreamToBuffer(ByteBuffer out,<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      DataInputStream in, int length) throws IOException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    if (out.hasArray()) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      in.readFully(out.array(), out.position() + out.arrayOffset(),<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          length);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      skip(out, length);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    } else {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      for (int i = 0; i &lt; length; ++i) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        out.put(in.readByte());<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><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  /**<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * Copy from the InputStream to a new heap ByteBuffer until the InputStream is exhausted.<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   */<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  public static ByteBuffer drainInputStreamToBuffer(InputStream is) throws IOException {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    IOUtils.copyBytes(is, baos, 4096, true);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    ByteBuffer buffer = ByteBuffer.wrap(baos.toByteArray());<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    buffer.rewind();<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    return buffer;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  /**<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   * Copy one buffer's whole data to another. Write starts at the current position of 'out' buffer.<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * Note : This will advance the position marker of {@code out} and also change the position maker<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   * for {@code in}.<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   * @param in source buffer<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   * @param out destination buffer<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   */<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  public static void copyFromBufferToBuffer(ByteBuffer in, ByteBuffer out) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    if (in.hasArray() &amp;&amp; out.hasArray()) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      int length = in.remaining();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      System.arraycopy(in.array(), in.arrayOffset(), out.array(), out.arrayOffset(), length);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      out.position(out.position() + length);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      in.position(in.limit());<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    } else if (UNSAFE_AVAIL) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      int length = in.remaining();<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      UnsafeAccess.copy(in, in.position(), out, out.position(), length);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      out.position(out.position() + length);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      in.position(in.limit());<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    } else {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      out.put(in);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    }<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>
-<span class="sourceLineNo">412</span>  /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * Copy from one buffer to another from given offset. This will be absolute positional copying and<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * won't affect the position of any of the buffers.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @param in<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @param out<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * @param sourceOffset<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * @param destinationOffset<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * @param length<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   */<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  public static void copyFromBufferToBuffer(ByteBuffer in, ByteBuffer out, int sourceOffset,<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      int destinationOffset, int length) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    if (in.hasArray() &amp;&amp; out.hasArray()) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      System.arraycopy(in.array(), sourceOffset + in.arrayOffset(), out.array(), out.arrayOffset()<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          + destinationOffset, length);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    } else if (UNSAFE_AVAIL) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      UnsafeAccess.copy(in, sourceOffset, out, destinationOffset, length);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    } else {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      ByteBuffer outDup = out.duplicate();<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      outDup.position(destinationOffset);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      ByteBuffer inDup = in.duplicate();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      inDup.position(sourceOffset).limit(sourceOffset + length);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      outDup.put(inDup);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    // We used to return a result but disabled; return destinationOffset + length;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  }<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>   * Copy from one buffer to another from given offset.<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * &lt;p&gt;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * Note : This will advance the position marker of {@code out} but not change the position maker<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * for {@code in}<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * @param in source buffer<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * @param out destination buffer<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * @param sourceOffset offset in the source buffer<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * @param length how many bytes to copy<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   */<a name="line.447"></a>
-<span class="sourceLineNo">448</span>  public static void copyFromBufferToBuffer(ByteBuffer in,<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      ByteBuffer out, int sourceOffset, int length) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    if (in.hasArray() &amp;&amp; out.hasArray()) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      System.arraycopy(in.array(), sourceOffset + in.arrayOffset(), out.array(), out.position()<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          + out.arrayOffset(), length);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      skip(out, length);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    } else if (UNSAFE_AVAIL) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      UnsafeAccess.copy(in, sourceOffset, out, out.position(), length);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      skip(out, length);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    } else {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      ByteBuffer inDup = in.duplicate();<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      inDup.position(sourceOffset).limit(sourceOffset + length);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      out.put(inDup);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    }<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>   * Find length of common prefix of two parts in the buffer<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   * @param buffer Where parts are located.<a name="line.466"></a>
-<span class="sourceLineNo">467</span>   * @param offsetLeft Offset of the first part.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * @param offsetRight Offset of the second part.<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * @param limit Maximal length of common prefix.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * @return Length of prefix.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
-<span class="sourceLineNo">472</span>  public static int findCommonPrefix(ByteBuffer buffer, int offsetLeft,<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      int offsetRight, int limit) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    int prefix = 0;<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span>    for (; prefix &lt; limit; ++prefix) {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      if (buffer.get(offsetLeft + prefix) != buffer.get(offsetRight + prefix)) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        break;<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><a name="line.481"></a>
-<span class="sourceLineNo">482</span>    return prefix;<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>  /**<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   * Find length of common prefix in two arrays.<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * @param left Array to be compared.<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   * @param leftOffset Offset in left array.<a name="line.488"></a>
-<span class="sourceLineNo">489</span>   * @param leftLength Length of left array.<a name="line.489"></a>
-<span class="sourceLineNo">490</span>   * @param right Array to be compared.<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * @param rightOffset Offset in right array.<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * @param rightLength Length of right array.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   */<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  public static int findCommonPrefix(<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      byte[] left, int leftOffset, int leftLength,<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      byte[] right, int rightOffset, int rightLength) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    int length = Math.min(leftLength, rightLength);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    int result = 0;<a name="line.498"></a>
-<span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    while (result &lt; length &amp;&amp;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        left[leftOffset + result] == right[rightOffset + result]) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      result++;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    }<a name="line.503"></a>
-<span class="sourceLineNo">504</span><a name="line.504"></a>
-<span class="sourceLineNo">505</span>    return result;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>  }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>  /**<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * Find length of common prefix in two arrays.<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * @param left ByteBuffer to be compared.<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param leftOffset Offset in left ByteBuffer.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * @param leftLength Length of left ByteBuffer.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * @param right ByteBuffer to be compared.<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * @param rightOffset Offset in right ByteBuffer.<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * @param rightLength Length of right ByteBuffer.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   */<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  public static int findCommonPrefix(ByteBuffer left, int leftOffset, int leftLength,<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      ByteBuffer right, int rightOffset, int rightLength) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    int length = Math.min(leftLength, rightLength);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    int result = 0;<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>    while (result &lt; length &amp;&amp; ByteBufferUtils.toByte(left, leftOffset + result) == ByteBufferUtils<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        .toByte(right, rightOffset + result)) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      result++;<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>    return result;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  }<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>   * Check whether two parts in the same buffer are equal.<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * @param buffer In which buffer there are parts<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * @param offsetLeft Beginning of first part.<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   * @param lengthLeft Length of the first part.<a name="line.534"></a>
-<span class="sourceLineNo">535</span>   * @param offsetRight Beginning of the second part.<a name="line.535"></a>
-<span class="sourceLineNo">536</span>   * @param lengthRight Length of the second part.<a name="line.536"></a>
-<span class="sourceLineNo">537</span>   * @return True if equal<a name="line.537"></a>
-<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
-<span class="sourceLineNo">539</span>  public static boolean arePartsEqual(ByteBuffer buffer,<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      int offsetLeft, int lengthLeft,<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      int offsetRight, int lengthRight) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    if (lengthLeft != lengthRight) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      return false;<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>    if (buffer.hasArray()) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      return 0 == Bytes.compareTo(<a name="line.547"></a>
-<span class="sourceLineNo">548</span>          buffer.array(), buffer.arrayOffset() + offsetLeft, lengthLeft,<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          buffer.array(), buffer.arrayOffset() + offsetRight, lengthRight);<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>    for (int i = 0; i &lt; lengthRight; ++i) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      if (buffer.get(offsetLeft + i) != buffer.get(offsetRight + i)) {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>        return false;<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      }<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    return true;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>  /**<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * Increment position in buffer.<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * @param buffer In this buffer.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * @param length By that many bytes.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   */<a name="line.564"></a>
-<span class="sourceLineNo">565</span>  public static void skip(ByteBuffer buffer, int length) {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    buffer.position(buffer.position() + length);<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>  public static void extendLimit(ByteBuffer buffer, int numBytes) {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    buffer.limit(buffer.limit() + numBytes);<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>   * Copy the bytes from position to limit into a new byte[] of the exact length and sets the<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * position and limit back to their original values (though not thread safe).<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * @param buffer copy from here<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   * @param startPosition put buffer.get(startPosition) into byte[0]<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   * @return a new byte[] containing the bytes in the specified range<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   */<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  public static byte[] toBytes(ByteBuffer buffer, int startPosition) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    int originalPosition = buffer.position();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    byte[] output = new byte[buffer.limit() - startPosition];<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    buffer.position(startPosition);<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    buffer.get(output);<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    buffer.position(originalPosition);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    return output;<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  }<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>  /**<a name="line.589"></a>
-<span class="sourceLineNo">590</span>   * Copy the given number of bytes from specified offset into a new byte[]<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   * @param buffer<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * @param offset<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * @param length<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @return a new byte[] containing the bytes in the specified range<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>  public static byte[] toBytes(ByteBuffer buffer, int offset, int length) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    byte[] output = new byte[length];<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    for (int i = 0; i &lt; length; i++) {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      output[i] = buffer.get(offset + i);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    }<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    return output;<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  }<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>  public static boolean equals(ByteBuffer buf1, int o1, int l1, ByteBuffer buf2, int o2, int l2) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    if ((l1 == 0) || (l2 == 0)) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      // both 0 length, return true, or else false<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      return l1 == l2;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    // Since we're often comparing adjacent sorted data,<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    // it's usual to have equal arrays except for the very last byte<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    // so check that first<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    if (toByte(buf1, o1 + l1 - 1) != toByte(buf2, o2 + l2 - 1)) return false;<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    return compareTo(buf1, o1, l1, buf2, o2, l2) == 0;<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>   * @param buf<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   *          ByteBuffer to hash<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   * @param offset<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   *          offset to start from<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * @param length<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   *          length to hash<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   */<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  public static int hashCode(ByteBuffer buf, int offset, int length) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    int hash = 1;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    for (int i = offset; i &lt; offset + length; i++) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      hash = (31 * hash) + (int) toByte(buf, i);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    return hash;<a name="line.629"></a>
-<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
-<span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>  public static int compareTo(ByteBuffer buf1, int o1, int l1, ByteBuffer buf2, int o2, int l2) {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    if (UNSAFE_UNALIGNED) {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      long offset1Adj, offset2Adj;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      Object refObj1 = null, refObj2 = null;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      if (buf1.isDirect()) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        offset1Adj = o1 + ((DirectBuffer) buf1).address();<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      } else {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        offset1Adj = o1 + buf1.arrayOffset() + UnsafeAccess.BYTE_ARRAY_BASE_OFFSET;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        refObj1 = buf1.array();<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      }<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      if (buf2.isDirect()) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        offset2Adj = o2 + ((DirectBuffer) buf2).address();<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      } else {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        offset2Adj = o2 + buf2.arrayOffset() + UnsafeAccess.BYTE_ARRAY_BASE_OFFSET;<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        refObj2 = buf2.array();<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      return compareToUnsafe(refObj1, offset1Adj, l1, refObj2, offset2Adj, l2);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    }<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    int end1 = o1 + l1;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    int end2 = o2 + l2;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    for (int i = o1, j = o2; i &lt; end1 &amp;&amp; j &lt; end2; i++, j++) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      int a = buf1.get(i) &amp; 0xFF;<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      int b = buf2.get(j) &amp; 0xFF;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      if (a != b) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>        return a - b;<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>    return l1 - l2;<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>  public static boolean equals(ByteBuffer buf1, int o1, int l1, byte[] buf2, int o2, int l2) {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    if ((l1 == 0) || (l2 == 0)) {<a name="line.663"></a>
-<span class="sourceLineNo">664</span>      // both 0 length, return true, or else false<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      return l1 == l2;<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    }<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    // Since we're often comparing adjacent sorted data,<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    // it's usual to have equal arrays except for the very last byte<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    // so check that first<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    if (toByte(buf1, o1 + l1 - 1) != buf2[o2 + l2 - 1]) return false;<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    return compareTo(buf1, o1, l1, buf2, o2, l2) == 0;<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>  public static int compareTo(byte [] buf1, int o1, int l1, ByteBuffer buf2, int o2, int l2) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    // This method is nearly same as the compareTo that follows but hard sharing code given<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    // byte array and bytebuffer types and this is a hot code path<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    if (UNSAFE_UNALIGNED) {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      long offset2Adj;<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      Object refObj2 = null;<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      if (buf2.isDirect()) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        offset2Adj = o2 + ((DirectBuffer)buf2).address();<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      } else {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        offset2Adj = o2 + buf2.arrayOffset() + UnsafeAccess.BYTE_ARRAY_BASE_OFFSET;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>        refObj2 = buf2.array();<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      }<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      return compareToUnsafe(buf1, o1 + UnsafeAccess.BYTE_ARRAY_BASE_OFFSET, l1,<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          refObj2, offset2Adj, l2);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>    }<a name="line.688"></a>
-<span class="sourceLineNo">689</span>    int end1 = o1 + l1;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    int end2 = o2 + l2;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    for (int i = o1, j = o2; i &lt; end1 &amp;&amp; j &lt; end2; i++, j++) {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      int a = buf1[i] &amp; 0xFF;<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      int b = buf2.get(j) &amp; 0xFF;<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      if (a != b) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>        return a - b;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      }<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    return l1 - l2;<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>  public static int compareTo(ByteBuffer buf1, int o1, int l1, byte[] buf2, int o2, int l2) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    if (UNSAFE_UNALIGNED) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      long offset1Adj;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      Object refObj1 = null;<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      if (buf1.isDirect()) {<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        offset1Adj = o1 + ((DirectBuffer) buf1).address();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      } else {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>        offset1Adj = o1 + buf1.arrayOffset() + UnsafeAccess.BYTE_ARRAY_BASE_OFFSET;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>        refObj1 = buf1.array();<a name="line.709"></a>
-<span class="sourceLineNo">710</span>      }<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      return compareToUnsafe(refObj1, offset1Adj, l1,<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          buf2, o2 + UnsafeAccess.BYTE_ARRAY_BASE_OFFSET, l2);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    int end1 = o1 + l1;<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    int end2 = o2 + l2;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    for (int i = o1, j = o2; i &lt; end1 &amp;&amp; j &lt; end2; i++, j++) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      int a = buf1.get(i) &amp; 0xFF;<a name="line.717"></a>
-<span class="sourceLineNo">718</span>      int b = buf2[j] &amp; 0xFF;<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      if (a != b) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        return a - b;<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>    return l1 - l2;<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>  static int compareToUnsafe(Object obj1, long o1, int l1, Object obj2, long o2, int l2) {<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    final int stride = 8;<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    final int minLength = Math.min(l1, l2);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    int strideLimit = minLength &amp; ~(stride - 1);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    int i;<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>     * Compare 8 bytes at a time. Benchmarking shows comparing 8 bytes at a time is no slower than<a name="line.733"></a>
-<span class="sourceLineNo">734</span>     * comparing 4 bytes at a time even on 32-bit. On the other hand, it is substantially faster on<a name="line.734"></a>
-<span class="sourceLineNo">735</span>     * 64-bit.<a name="line.735"></a>
-<span class="sourceLineNo">736</span>     */<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    for (i = 0; i &lt; strideLimit; i += stride) {<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      long lw = UnsafeAccess.theUnsafe.getLong(obj1, o1 + (long) i);<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      long rw = UnsafeAccess.theUnsafe.getLong(obj2, o2 + (long) i);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      if (lw != rw) {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        if (!UnsafeAccess.littleEndian) {<a name="line.741"></a>
-<span class="sourceLineNo">742</span>          return ((lw + Long.MIN_VALUE) &lt; (rw + Long.MIN_VALUE)) ? -1 : 1;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>        }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span>        /*<a name="line.745"></a>
-<span class="sourceLineNo">746</span>         * We want to compare only the first index where left[index] != right[index]. This<a name="line.746"></a>
-<span class="sourceLineNo">747</span>         * corresponds to the least significant nonzero byte in lw ^ rw, since lw and rw are<a name="line.747"></a>
-<span class="sourceLineNo">748</span>         * little-endian. Long.numberOfTrailingZeros(diff) tells us the least significant<a name="line.748"></a>
-<span class="sourceLineNo">749</span>         * nonzero bit, and zeroing out the first three bits of L.nTZ gives us the shift to get<a name="line.749"></a>
-<span class="sourceLineNo">750</span>         * that least significant nonzero byte. This comparison logic is based on UnsignedBytes<a name="line.750"></a>
-<span class="sourceLineNo">751</span>         * from guava v21<a name="line.751"></a>
-<span class="sourceLineNo">752</span>         */<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        int n = Long.numberOfTrailingZeros(lw ^ rw) &amp; ~0x7;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>        return ((int) ((lw &gt;&gt;&gt; n) &amp; 0xFF)) - ((int) ((rw &gt;&gt;&gt; n) &amp; 0xFF));<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><a name="line.757"></a>
-<span class="sourceLineNo">758</span>    // The epilogue to cover the last (minLength % stride) elements.<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    for (; i &lt; minLength; i++) {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      int il = (UnsafeAccess.theUnsafe.getByte(obj1, o1 + i) &amp; 0xFF);<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      int ir = (UnsafeAccess.theUnsafe.getByte(obj2, o2 + i) &amp; 0xFF);<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      if (il != ir) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>        return il - ir;<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      }<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    return l1 - l2;<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  }<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>   * Reads a short value at the given buffer's offset.<a name="line.770"></a>
-<span class="sourceLineNo">771</span>   * @param buffer<a name="line.771"></a>
-<span class="sourceLineNo">772</span>   * @param offset<a name="line.772"></a>
-<span class="sourceLineNo">773</span>   * @return short value at offset<a name="line.773"></a>
-<span class="sourceLineNo">774</span>   */<a name="line.774"></a>
-<span class="sourceLineNo">775</span>  public static short toShort(ByteBuffer buffer, int offset) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    if (UNSAFE_UNALIGNED) {<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      return UnsafeAccess.toShort(buffer, offset);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    } else {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      return buffer.getShort(offset);<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>  /**<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   * Reads an int value at the given buffer's current position. Also advances the buffer's position<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   */<a name="line.785"></a>
-<span class="sourceLineNo">786</span>  public static int toInt(ByteBuffer buffer) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>    if (UNSAFE_UNALIGNED) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      int i = UnsafeAccess.toInt(buffer, buffer.position());<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      buffer.position(buffer.position() + Bytes.SIZEOF_INT);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      return i;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    } else {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      return buffer.getInt();<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    }<a name="line.793"></a>
-<span class="sourceLineNo">794</span>  }<a name="line.794"></a>
-<span class="sourceLineNo">795</span><a name="line.795"></a>
-<span class="sourceLineNo">796</span>  /**<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * Reads an int value at the given buffer's offset.<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * @param buffer<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * @param offset<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   * @return int value at offset<a name="line.800"></a>
-<span class="sourceLineNo">801</span>   */<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  public static int toInt(ByteBuffer buffer, int offset) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    if (UNSAFE_UNALIGNED) {<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      return UnsafeAccess.toInt(buffer, offset);<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    } else {<a name="line.805"></a>
-<span class="sourceLineNo">806</span>      return buffer.getInt(offset);<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>  /**<a name="line.810"></a>
-<span class="sourceLineNo">811</span>   * Converts a ByteBuffer to an int value<a name="line.811"></a>
-<span class="sourceLineNo">812</span>   *<a name="line.812"></a>
-<span class="sourceLineNo">813</span>   * @param buf The ByteBuffer<a name="line.813"></a>
-<span class="sourceLineNo">814</span>   * @param offset Offset to int value<a name="line.814"></a>
-<span class="sourceLineNo">815</span>   * @param length Number of bytes used to store the int value.<a name="line.815"></a>
-<span class="sourceLineNo">816</span>   * @return the int value<a name="line.816"></a>
-<span class="sourceLineNo">817</span>   * @throws IllegalArgumentException<a name="line.817"></a>
-<span class="sourceLineNo">818</span>   *           if there's not enough bytes left in the buffer after the given offset<a name="line.818"></a>
-<span class="sourceLineNo">819</span>   */<a name="line.819"></a>
-<span class="sourceLineNo">820</span>  public static int readAsInt(ByteBuffer buf, int offset, final int length) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    if (offset + length &gt; buf.limit()) {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>      throw new IllegalArgumentException("offset (" + offset + ") + length (" + length<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          + ") exceed the" + " limit of the buffer: " + buf.limit());<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    }<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    int n = 0;<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    for(int i = offset; i &lt; (offset + length); i++) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>      n &lt;&lt;= 8;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      n ^= toByte(buf, i) &amp; 0xFF;<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    return n;<a name="line.830"></a>
-<span class="sourceLineNo">831</span>  }<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>  /**<a name="line.833"></a>
-<span class="sourceLineNo">834</span>   * Reads a long value at the given buffer's offset.<a name="line.834"></a>
-<span class="sourceLineNo">835</span>   * @param buffer<a name="line.835"></a>
-<span class="sourceLineNo">836</span>   * @param offset<a name="line.836"></a>
-<span class="sourceLineNo">837</span>   * @return long value at offset<a name="line.837"></a>
-<span class="sourceLineNo">838</span>   */<a name="line.838"></a>
-<span class="sourceLineNo">839</span>  public static long toLong(ByteBuffer buffer, int offset) {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    if (UNSAFE_UNALIGNED) {<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      return UnsafeAccess.toLong(buffer, offset);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    } else {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      return buffer.getLong(offset);<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>   * Put an int value out to the given ByteBuffer's current position in big-endian format.<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * This also advances the position in buffer by int size.<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   * @param buffer the ByteBuffer to write to<a name="line.850"></a>
-<span class="sourceLineNo">851</span>   * @param val int to write out<a name="line.851"></a>
-<span class="sourceLineNo">852</span>   */<a name="line.852"></a>
-<span class="sourceLineNo">853</span>  public static void putInt(ByteBuffer buffer, int val) {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>    if (UNSAFE_UNALIGNED) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>      int newPos = UnsafeAccess.putInt(buffer, buffer.position(), val);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>      buffer.position(newPos);<a name="line.856"></a>
-<span class="sourceLineNo">857</span>    } else {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>      buffer.putInt(val);<a name="line.858"></a>
-<span class="sourceLineNo">859</span>    }<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>  public static int putInt(ByteBuffer buffer, int index, int val) {<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    if (UNSAFE_UNALIGNED) {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>      return UnsafeAccess.putInt(buffer, index, val);<a name="line.864"></a>
-<span class="sourceLineNo">865</span>    }<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    buffer.putInt(index, val);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    return index + Bytes.SIZEOF_INT;<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>  /**<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * Reads a double value at the given buffer's offset.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   * @param buffer<a name="line.872"></a>
-<span class="sourceLineNo">873</span>   * @param offset offset where double is<a name="line.873"></a>
-<span class="sourceLineNo">874</span>   * @return double value at offset<a name="line.874"></a>
-<span class="sourceLineNo">875</span>   */<a name="line.875"></a>
-<span class="sourceLineNo">876</span>  public static double toDouble(ByteBuffer buffer, int offset) {<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    return Double.longBitsToDouble(toLong(buffer, offset));<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>  /**<a name="line.880"></a>
-<span class="sourceLineNo">881</span>   * Reads a BigDecimal value at the given buffer's offset.<a name="line.881"></a>
-<span class="sourceLineNo">882</span>   * @param buffer<a name="line.882"></a>
-<span class="sourceLineNo">883</span>   * @param offset<a name="line.883"></a>
-<span class="sourceLineNo">884</span>   * @return BigDecimal value at offset<a name="line.884"></a>
-<span class="sourceLineNo">885</span>   */<a name="line.885"></a>
-<span class="sourceLineNo">886</span>  public static BigDecimal toBigDecimal(ByteBuffer buffer, int offset, int length) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    if (buffer == null || length &lt; Bytes.SIZEOF_INT + 1 ||<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      (offset + length &gt; buffer.limit())) {<a name="line.888"></a>
-<span class="sourceLineNo">889</span>      return null;<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>    int scale = toInt(buffer, offset);<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    byte[] tcBytes = new byte[length - Bytes.SIZEOF_INT];<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    copyFromBufferToArray(tcBytes, buffer, offset + Bytes.SIZEOF_INT, 0, length - Bytes.SIZEOF_INT);<a name="line.894"></a>
-<span class="sourceLineNo">895</span>    return new BigDecimal(new BigInteger(tcBytes), scale);<a name="line.895"></a>
-<span class="sourceLineNo">896</span>  }<a name="line.896"></a>
-<span class="sourceLineNo">897</span><a name="line.897"></a>
-<span class="sourceLineNo">898</span>  /**<a name="line.898"></a>
-<span class="sourceLineNo">899</span>   * Put a short value out to the given ByteBuffer's current position in big-endian format.<a name="line.899"></a>
-<span class="sourceLineNo">900</span>   * This also advances the position in buffer by short size.<a name="line.900"></a>
-<span class="sourceLineNo">901</span>   * @param buffer the ByteBuffer to write to<a name="line.901"></a>
-<span class="sourceLineNo">902</span>   * @param val short to write out<a name="line.902"></a>
-<span class="sourceLineNo">903</span>   */<a name="line.903"></a>
-<span class="sourceLineNo">904</span>  public static void putShort(ByteBuffer buffer, short val) {<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    if (UNSAFE_UNALIGNED) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      int newPos = UnsafeAccess.putShort(buffer, buffer.position(), val);<a name="line.906"></a>
-<span class="sourceLineNo">907</span>      buffer.position(newPos);<a name="line.907"></a>
-<span class="sourceLineNo">908</span>    } else {<a name="line.908"></a>
-<span class="sourceLineNo">909</span>      buffer.putShort(val);<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><a name="line.912"></a>
-<span class="sourceLineNo">913</span>  public static int putShort(ByteBuffer buffer, int index, short val) {<a name="line.913"></a>
-<span class="sourceLineNo">914</span>    if (UNSAFE_UNALIGNED) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>      return UnsafeAccess.putShort(buffer, index, val);<a name="line.915"></a>
-<span class="sourceLineNo">916</span>    }<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    buffer.putShort(index, val);<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    return index + Bytes.SIZEOF_SHORT;<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 int putAsShort(ByteBuffer buf, int index, int val) {<a name="line.921"></a>
-<span class="sourceLineNo">922</span>    buf.put(index + 1, (byte) val);<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    val &gt;&gt;= 8;<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    buf.put(index, (byte) val);<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    return index + Bytes.SIZEOF_SHORT;<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>  /**<a name="line.928"></a>
-<span class="sourceLineNo">929</span>   * Put a long value out to the given ByteBuffer's current position in big-endian format.<a name="line.929"></a>
-<span class="sourceLineNo">930</span>   * This also advances the position in buffer by long size.<a name="line.930"></a>
-<span class="sourceLineNo">931</span>   * @param buffer the ByteBuffer to write to<a name="line.931"></a>
-<span class="sourceLineNo">932</span>   * @param val long to write out<a name="line.932"></a>
-<span class="sourceLineNo">933</span>   */<a name="line.933"></a>
-<span class="sourceLineNo">934</span>  public static void putLong(ByteBuffer buffer, long val) {<a name="line.934"></a>
-<span class="sourceLineNo">935</span>    if (UNSAFE_UNALIGNED) {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      int newPos = UnsafeAccess.putLong(buffer, buffer.position(), val);<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      buffer.position(newPos);<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    } else {<a name="line.938"></a>
-<span class="sourceLineNo">939</span>      buffer.putLong(val);<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    }<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>  public static int putLong(ByteBuffer buffer, int index, long val) {<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    if (UNSAFE_UNALIGNED) {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>      return UnsafeAccess.putLong(buffer, index, val);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    }<a name="line.946"></a>
-<span class="sourceLineNo">947</span>    buffer.putLong(index, val);<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    return index + Bytes.SIZEOF_LONG;<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  }<a name="line.949"></a>
-<span class="sourceLineNo">950</span><a name="line.950"></a>
-<span class="sourceLineNo">951</span>  /**<a name="line.951"></a>
-<span class="sourceLineNo">952</span>   * Copies the bytes from given array's offset to length part into the given buffer. Puts the bytes<a name="line.952"></a>
-<span class="sourceLineNo">953</span>   * to buffer's current position. This also advances the position in the 'out' buffer by 'length'<a name="line.953"></a>
-<span class="sourceLineNo">954

<TRUNCATED>

[27/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html
index 7d27402..3da432b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html
@@ -2560,8 +2560,8 @@
 <span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>    MemStoreSize mss = this.memStoreSizing.getMemStoreSize();<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>    LOG.info("Flushing " + + storesToFlush.size() + "/" + stores.size() + " column families," +<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        " memstore data size=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        " memstore heap size=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
+<span class="sourceLineNo">2555</span>        " dataSize=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>        " heapSize=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>        ((perCfExtras != null &amp;&amp; perCfExtras.length() &gt; 0)? perCfExtras.toString(): "") +<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>        ((wal != null) ? "" : "; WAL is null, using passed sequenceid=" + sequenceId));<a name="line.2558"></a>
 <span class="sourceLineNo">2559</span>  }<a name="line.2559"></a>
@@ -2761,10 +2761,10 @@
 <span class="sourceLineNo">2753</span>    long time = EnvironmentEdgeManager.currentTime() - startTime;<a name="line.2753"></a>
 <span class="sourceLineNo">2754</span>    MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2754"></a>
 <span class="sourceLineNo">2755</span>    long memstoresize = this.memStoreSizing.getMemStoreSize().getDataSize();<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    String msg = "Finished memstore flush;"<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        + " data size ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        + ", heap size ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        + ", currentsize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
+<span class="sourceLineNo">2756</span>    String msg = "Finished flush of"<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        + " dataSize ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>        + ", heapSize ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>        + ", currentSize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>        + " for " + this.getRegionInfo().getEncodedName() + " in " + time + "ms, sequenceid="<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span>        + flushOpSeqId +  ", compaction requested=" + compactionRequested<a name="line.2761"></a>
 <span class="sourceLineNo">2762</span>        + ((wal == null) ? "; wal=null" : "");<a name="line.2762"></a>
@@ -4244,7 +4244,7 @@
 <span class="sourceLineNo">4236</span>   * @param cellItr<a name="line.4236"></a>
 <span class="sourceLineNo">4237</span>   * @param now<a name="line.4237"></a>
 <span class="sourceLineNo">4238</span>   */<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>  public void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
+<span class="sourceLineNo">4239</span>  private static void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
 <span class="sourceLineNo">4240</span>      throws IOException {<a name="line.4240"></a>
 <span class="sourceLineNo">4241</span>    for (List&lt;Cell&gt; cells: cellItr) {<a name="line.4241"></a>
 <span class="sourceLineNo">4242</span>      if (cells == null) continue;<a name="line.4242"></a>
@@ -4299,12 +4299,12 @@
 <span class="sourceLineNo">4291</span>      requestFlush();<a name="line.4291"></a>
 <span class="sourceLineNo">4292</span>      // Don't print current limit because it will vary too much. The message is used as a key<a name="line.4292"></a>
 <span class="sourceLineNo">4293</span>      // over in RetriesExhaustedWithDetailsException processing.<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit; regionName=" +<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span>          ", server=" + (this.getRegionServerServices() == null ? "unknown":<a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>          this.getRegionServerServices().getServerName()) +<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>          ", blockingMemStoreSize=" +<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>          org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(blockingMemStoreSize));<a name="line.4299"></a>
+<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit=" +<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>        org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(this.blockingMemStoreSize) +<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>        ", regionName=" +<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>          ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>              this.getRegionServerServices().getServerName()));<a name="line.4299"></a>
 <span class="sourceLineNo">4300</span>    }<a name="line.4300"></a>
 <span class="sourceLineNo">4301</span>  }<a name="line.4301"></a>
 <span class="sourceLineNo">4302</span><a name="line.4302"></a>
@@ -8610,7 +8610,8 @@
 <span class="sourceLineNo">8602</span>  public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8602"></a>
 <span class="sourceLineNo">8603</span>    requestFlush0(tracker);<a name="line.8603"></a>
 <span class="sourceLineNo">8604</span>  }<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span>}<a name="line.8605"></a>
+<span class="sourceLineNo">8605</span><a name="line.8605"></a>
+<span class="sourceLineNo">8606</span>}<a name="line.8606"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
index 7d27402..3da432b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
@@ -2560,8 +2560,8 @@
 <span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>    MemStoreSize mss = this.memStoreSizing.getMemStoreSize();<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>    LOG.info("Flushing " + + storesToFlush.size() + "/" + stores.size() + " column families," +<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        " memstore data size=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        " memstore heap size=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
+<span class="sourceLineNo">2555</span>        " dataSize=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>        " heapSize=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>        ((perCfExtras != null &amp;&amp; perCfExtras.length() &gt; 0)? perCfExtras.toString(): "") +<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>        ((wal != null) ? "" : "; WAL is null, using passed sequenceid=" + sequenceId));<a name="line.2558"></a>
 <span class="sourceLineNo">2559</span>  }<a name="line.2559"></a>
@@ -2761,10 +2761,10 @@
 <span class="sourceLineNo">2753</span>    long time = EnvironmentEdgeManager.currentTime() - startTime;<a name="line.2753"></a>
 <span class="sourceLineNo">2754</span>    MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2754"></a>
 <span class="sourceLineNo">2755</span>    long memstoresize = this.memStoreSizing.getMemStoreSize().getDataSize();<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    String msg = "Finished memstore flush;"<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        + " data size ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        + ", heap size ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        + ", currentsize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
+<span class="sourceLineNo">2756</span>    String msg = "Finished flush of"<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        + " dataSize ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>        + ", heapSize ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>        + ", currentSize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>        + " for " + this.getRegionInfo().getEncodedName() + " in " + time + "ms, sequenceid="<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span>        + flushOpSeqId +  ", compaction requested=" + compactionRequested<a name="line.2761"></a>
 <span class="sourceLineNo">2762</span>        + ((wal == null) ? "; wal=null" : "");<a name="line.2762"></a>
@@ -4244,7 +4244,7 @@
 <span class="sourceLineNo">4236</span>   * @param cellItr<a name="line.4236"></a>
 <span class="sourceLineNo">4237</span>   * @param now<a name="line.4237"></a>
 <span class="sourceLineNo">4238</span>   */<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>  public void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
+<span class="sourceLineNo">4239</span>  private static void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
 <span class="sourceLineNo">4240</span>      throws IOException {<a name="line.4240"></a>
 <span class="sourceLineNo">4241</span>    for (List&lt;Cell&gt; cells: cellItr) {<a name="line.4241"></a>
 <span class="sourceLineNo">4242</span>      if (cells == null) continue;<a name="line.4242"></a>
@@ -4299,12 +4299,12 @@
 <span class="sourceLineNo">4291</span>      requestFlush();<a name="line.4291"></a>
 <span class="sourceLineNo">4292</span>      // Don't print current limit because it will vary too much. The message is used as a key<a name="line.4292"></a>
 <span class="sourceLineNo">4293</span>      // over in RetriesExhaustedWithDetailsException processing.<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit; regionName=" +<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span>          ", server=" + (this.getRegionServerServices() == null ? "unknown":<a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>          this.getRegionServerServices().getServerName()) +<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>          ", blockingMemStoreSize=" +<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>          org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(blockingMemStoreSize));<a name="line.4299"></a>
+<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit=" +<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>        org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(this.blockingMemStoreSize) +<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>        ", regionName=" +<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>          ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>              this.getRegionServerServices().getServerName()));<a name="line.4299"></a>
 <span class="sourceLineNo">4300</span>    }<a name="line.4300"></a>
 <span class="sourceLineNo">4301</span>  }<a name="line.4301"></a>
 <span class="sourceLineNo">4302</span><a name="line.4302"></a>
@@ -8610,7 +8610,8 @@
 <span class="sourceLineNo">8602</span>  public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8602"></a>
 <span class="sourceLineNo">8603</span>    requestFlush0(tracker);<a name="line.8603"></a>
 <span class="sourceLineNo">8604</span>  }<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span>}<a name="line.8605"></a>
+<span class="sourceLineNo">8605</span><a name="line.8605"></a>
+<span class="sourceLineNo">8606</span>}<a name="line.8606"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html
index 7d27402..3da432b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html
@@ -2560,8 +2560,8 @@
 <span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>    MemStoreSize mss = this.memStoreSizing.getMemStoreSize();<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>    LOG.info("Flushing " + + storesToFlush.size() + "/" + stores.size() + " column families," +<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        " memstore data size=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        " memstore heap size=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
+<span class="sourceLineNo">2555</span>        " dataSize=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>        " heapSize=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>        ((perCfExtras != null &amp;&amp; perCfExtras.length() &gt; 0)? perCfExtras.toString(): "") +<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>        ((wal != null) ? "" : "; WAL is null, using passed sequenceid=" + sequenceId));<a name="line.2558"></a>
 <span class="sourceLineNo">2559</span>  }<a name="line.2559"></a>
@@ -2761,10 +2761,10 @@
 <span class="sourceLineNo">2753</span>    long time = EnvironmentEdgeManager.currentTime() - startTime;<a name="line.2753"></a>
 <span class="sourceLineNo">2754</span>    MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2754"></a>
 <span class="sourceLineNo">2755</span>    long memstoresize = this.memStoreSizing.getMemStoreSize().getDataSize();<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    String msg = "Finished memstore flush;"<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        + " data size ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        + ", heap size ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        + ", currentsize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
+<span class="sourceLineNo">2756</span>    String msg = "Finished flush of"<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        + " dataSize ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>        + ", heapSize ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>        + ", currentSize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>        + " for " + this.getRegionInfo().getEncodedName() + " in " + time + "ms, sequenceid="<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span>        + flushOpSeqId +  ", compaction requested=" + compactionRequested<a name="line.2761"></a>
 <span class="sourceLineNo">2762</span>        + ((wal == null) ? "; wal=null" : "");<a name="line.2762"></a>
@@ -4244,7 +4244,7 @@
 <span class="sourceLineNo">4236</span>   * @param cellItr<a name="line.4236"></a>
 <span class="sourceLineNo">4237</span>   * @param now<a name="line.4237"></a>
 <span class="sourceLineNo">4238</span>   */<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>  public void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
+<span class="sourceLineNo">4239</span>  private static void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
 <span class="sourceLineNo">4240</span>      throws IOException {<a name="line.4240"></a>
 <span class="sourceLineNo">4241</span>    for (List&lt;Cell&gt; cells: cellItr) {<a name="line.4241"></a>
 <span class="sourceLineNo">4242</span>      if (cells == null) continue;<a name="line.4242"></a>
@@ -4299,12 +4299,12 @@
 <span class="sourceLineNo">4291</span>      requestFlush();<a name="line.4291"></a>
 <span class="sourceLineNo">4292</span>      // Don't print current limit because it will vary too much. The message is used as a key<a name="line.4292"></a>
 <span class="sourceLineNo">4293</span>      // over in RetriesExhaustedWithDetailsException processing.<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit; regionName=" +<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span>          ", server=" + (this.getRegionServerServices() == null ? "unknown":<a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>          this.getRegionServerServices().getServerName()) +<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>          ", blockingMemStoreSize=" +<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>          org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(blockingMemStoreSize));<a name="line.4299"></a>
+<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit=" +<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>        org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(this.blockingMemStoreSize) +<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>        ", regionName=" +<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>          ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>              this.getRegionServerServices().getServerName()));<a name="line.4299"></a>
 <span class="sourceLineNo">4300</span>    }<a name="line.4300"></a>
 <span class="sourceLineNo">4301</span>  }<a name="line.4301"></a>
 <span class="sourceLineNo">4302</span><a name="line.4302"></a>
@@ -8610,7 +8610,8 @@
 <span class="sourceLineNo">8602</span>  public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8602"></a>
 <span class="sourceLineNo">8603</span>    requestFlush0(tracker);<a name="line.8603"></a>
 <span class="sourceLineNo">8604</span>  }<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span>}<a name="line.8605"></a>
+<span class="sourceLineNo">8605</span><a name="line.8605"></a>
+<span class="sourceLineNo">8606</span>}<a name="line.8606"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html
index 7d27402..3da432b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html
@@ -2560,8 +2560,8 @@
 <span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>    MemStoreSize mss = this.memStoreSizing.getMemStoreSize();<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>    LOG.info("Flushing " + + storesToFlush.size() + "/" + stores.size() + " column families," +<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        " memstore data size=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        " memstore heap size=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
+<span class="sourceLineNo">2555</span>        " dataSize=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>        " heapSize=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>        ((perCfExtras != null &amp;&amp; perCfExtras.length() &gt; 0)? perCfExtras.toString(): "") +<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>        ((wal != null) ? "" : "; WAL is null, using passed sequenceid=" + sequenceId));<a name="line.2558"></a>
 <span class="sourceLineNo">2559</span>  }<a name="line.2559"></a>
@@ -2761,10 +2761,10 @@
 <span class="sourceLineNo">2753</span>    long time = EnvironmentEdgeManager.currentTime() - startTime;<a name="line.2753"></a>
 <span class="sourceLineNo">2754</span>    MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2754"></a>
 <span class="sourceLineNo">2755</span>    long memstoresize = this.memStoreSizing.getMemStoreSize().getDataSize();<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    String msg = "Finished memstore flush;"<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        + " data size ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        + ", heap size ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        + ", currentsize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
+<span class="sourceLineNo">2756</span>    String msg = "Finished flush of"<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        + " dataSize ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>        + ", heapSize ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>        + ", currentSize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>        + " for " + this.getRegionInfo().getEncodedName() + " in " + time + "ms, sequenceid="<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span>        + flushOpSeqId +  ", compaction requested=" + compactionRequested<a name="line.2761"></a>
 <span class="sourceLineNo">2762</span>        + ((wal == null) ? "; wal=null" : "");<a name="line.2762"></a>
@@ -4244,7 +4244,7 @@
 <span class="sourceLineNo">4236</span>   * @param cellItr<a name="line.4236"></a>
 <span class="sourceLineNo">4237</span>   * @param now<a name="line.4237"></a>
 <span class="sourceLineNo">4238</span>   */<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>  public void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
+<span class="sourceLineNo">4239</span>  private static void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
 <span class="sourceLineNo">4240</span>      throws IOException {<a name="line.4240"></a>
 <span class="sourceLineNo">4241</span>    for (List&lt;Cell&gt; cells: cellItr) {<a name="line.4241"></a>
 <span class="sourceLineNo">4242</span>      if (cells == null) continue;<a name="line.4242"></a>
@@ -4299,12 +4299,12 @@
 <span class="sourceLineNo">4291</span>      requestFlush();<a name="line.4291"></a>
 <span class="sourceLineNo">4292</span>      // Don't print current limit because it will vary too much. The message is used as a key<a name="line.4292"></a>
 <span class="sourceLineNo">4293</span>      // over in RetriesExhaustedWithDetailsException processing.<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit; regionName=" +<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span>          ", server=" + (this.getRegionServerServices() == null ? "unknown":<a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>          this.getRegionServerServices().getServerName()) +<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>          ", blockingMemStoreSize=" +<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>          org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(blockingMemStoreSize));<a name="line.4299"></a>
+<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit=" +<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>        org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(this.blockingMemStoreSize) +<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>        ", regionName=" +<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>          ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>              this.getRegionServerServices().getServerName()));<a name="line.4299"></a>
 <span class="sourceLineNo">4300</span>    }<a name="line.4300"></a>
 <span class="sourceLineNo">4301</span>  }<a name="line.4301"></a>
 <span class="sourceLineNo">4302</span><a name="line.4302"></a>
@@ -8610,7 +8610,8 @@
 <span class="sourceLineNo">8602</span>  public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8602"></a>
 <span class="sourceLineNo">8603</span>    requestFlush0(tracker);<a name="line.8603"></a>
 <span class="sourceLineNo">8604</span>  }<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span>}<a name="line.8605"></a>
+<span class="sourceLineNo">8605</span><a name="line.8605"></a>
+<span class="sourceLineNo">8606</span>}<a name="line.8606"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html
index 7d27402..3da432b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html
@@ -2560,8 +2560,8 @@
 <span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>    MemStoreSize mss = this.memStoreSizing.getMemStoreSize();<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>    LOG.info("Flushing " + + storesToFlush.size() + "/" + stores.size() + " column families," +<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        " memstore data size=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        " memstore heap size=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
+<span class="sourceLineNo">2555</span>        " dataSize=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>        " heapSize=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>        ((perCfExtras != null &amp;&amp; perCfExtras.length() &gt; 0)? perCfExtras.toString(): "") +<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>        ((wal != null) ? "" : "; WAL is null, using passed sequenceid=" + sequenceId));<a name="line.2558"></a>
 <span class="sourceLineNo">2559</span>  }<a name="line.2559"></a>
@@ -2761,10 +2761,10 @@
 <span class="sourceLineNo">2753</span>    long time = EnvironmentEdgeManager.currentTime() - startTime;<a name="line.2753"></a>
 <span class="sourceLineNo">2754</span>    MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2754"></a>
 <span class="sourceLineNo">2755</span>    long memstoresize = this.memStoreSizing.getMemStoreSize().getDataSize();<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    String msg = "Finished memstore flush;"<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        + " data size ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        + ", heap size ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        + ", currentsize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
+<span class="sourceLineNo">2756</span>    String msg = "Finished flush of"<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        + " dataSize ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>        + ", heapSize ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>        + ", currentSize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>        + " for " + this.getRegionInfo().getEncodedName() + " in " + time + "ms, sequenceid="<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span>        + flushOpSeqId +  ", compaction requested=" + compactionRequested<a name="line.2761"></a>
 <span class="sourceLineNo">2762</span>        + ((wal == null) ? "; wal=null" : "");<a name="line.2762"></a>
@@ -4244,7 +4244,7 @@
 <span class="sourceLineNo">4236</span>   * @param cellItr<a name="line.4236"></a>
 <span class="sourceLineNo">4237</span>   * @param now<a name="line.4237"></a>
 <span class="sourceLineNo">4238</span>   */<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>  public void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
+<span class="sourceLineNo">4239</span>  private static void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
 <span class="sourceLineNo">4240</span>      throws IOException {<a name="line.4240"></a>
 <span class="sourceLineNo">4241</span>    for (List&lt;Cell&gt; cells: cellItr) {<a name="line.4241"></a>
 <span class="sourceLineNo">4242</span>      if (cells == null) continue;<a name="line.4242"></a>
@@ -4299,12 +4299,12 @@
 <span class="sourceLineNo">4291</span>      requestFlush();<a name="line.4291"></a>
 <span class="sourceLineNo">4292</span>      // Don't print current limit because it will vary too much. The message is used as a key<a name="line.4292"></a>
 <span class="sourceLineNo">4293</span>      // over in RetriesExhaustedWithDetailsException processing.<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit; regionName=" +<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span>          ", server=" + (this.getRegionServerServices() == null ? "unknown":<a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>          this.getRegionServerServices().getServerName()) +<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>          ", blockingMemStoreSize=" +<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>          org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(blockingMemStoreSize));<a name="line.4299"></a>
+<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit=" +<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>        org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(this.blockingMemStoreSize) +<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>        ", regionName=" +<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>          ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>              this.getRegionServerServices().getServerName()));<a name="line.4299"></a>
 <span class="sourceLineNo">4300</span>    }<a name="line.4300"></a>
 <span class="sourceLineNo">4301</span>  }<a name="line.4301"></a>
 <span class="sourceLineNo">4302</span><a name="line.4302"></a>
@@ -8610,7 +8610,8 @@
 <span class="sourceLineNo">8602</span>  public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8602"></a>
 <span class="sourceLineNo">8603</span>    requestFlush0(tracker);<a name="line.8603"></a>
 <span class="sourceLineNo">8604</span>  }<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span>}<a name="line.8605"></a>
+<span class="sourceLineNo">8605</span><a name="line.8605"></a>
+<span class="sourceLineNo">8606</span>}<a name="line.8606"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html
index 7d27402..3da432b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html
@@ -2560,8 +2560,8 @@
 <span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>    MemStoreSize mss = this.memStoreSizing.getMemStoreSize();<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>    LOG.info("Flushing " + + storesToFlush.size() + "/" + stores.size() + " column families," +<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        " memstore data size=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        " memstore heap size=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
+<span class="sourceLineNo">2555</span>        " dataSize=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>        " heapSize=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>        ((perCfExtras != null &amp;&amp; perCfExtras.length() &gt; 0)? perCfExtras.toString(): "") +<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>        ((wal != null) ? "" : "; WAL is null, using passed sequenceid=" + sequenceId));<a name="line.2558"></a>
 <span class="sourceLineNo">2559</span>  }<a name="line.2559"></a>
@@ -2761,10 +2761,10 @@
 <span class="sourceLineNo">2753</span>    long time = EnvironmentEdgeManager.currentTime() - startTime;<a name="line.2753"></a>
 <span class="sourceLineNo">2754</span>    MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2754"></a>
 <span class="sourceLineNo">2755</span>    long memstoresize = this.memStoreSizing.getMemStoreSize().getDataSize();<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    String msg = "Finished memstore flush;"<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        + " data size ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        + ", heap size ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        + ", currentsize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
+<span class="sourceLineNo">2756</span>    String msg = "Finished flush of"<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        + " dataSize ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>        + ", heapSize ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>        + ", currentSize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>        + " for " + this.getRegionInfo().getEncodedName() + " in " + time + "ms, sequenceid="<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span>        + flushOpSeqId +  ", compaction requested=" + compactionRequested<a name="line.2761"></a>
 <span class="sourceLineNo">2762</span>        + ((wal == null) ? "; wal=null" : "");<a name="line.2762"></a>
@@ -4244,7 +4244,7 @@
 <span class="sourceLineNo">4236</span>   * @param cellItr<a name="line.4236"></a>
 <span class="sourceLineNo">4237</span>   * @param now<a name="line.4237"></a>
 <span class="sourceLineNo">4238</span>   */<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>  public void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
+<span class="sourceLineNo">4239</span>  private static void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
 <span class="sourceLineNo">4240</span>      throws IOException {<a name="line.4240"></a>
 <span class="sourceLineNo">4241</span>    for (List&lt;Cell&gt; cells: cellItr) {<a name="line.4241"></a>
 <span class="sourceLineNo">4242</span>      if (cells == null) continue;<a name="line.4242"></a>
@@ -4299,12 +4299,12 @@
 <span class="sourceLineNo">4291</span>      requestFlush();<a name="line.4291"></a>
 <span class="sourceLineNo">4292</span>      // Don't print current limit because it will vary too much. The message is used as a key<a name="line.4292"></a>
 <span class="sourceLineNo">4293</span>      // over in RetriesExhaustedWithDetailsException processing.<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit; regionName=" +<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span>          ", server=" + (this.getRegionServerServices() == null ? "unknown":<a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>          this.getRegionServerServices().getServerName()) +<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>          ", blockingMemStoreSize=" +<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>          org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(blockingMemStoreSize));<a name="line.4299"></a>
+<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit=" +<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>        org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(this.blockingMemStoreSize) +<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>        ", regionName=" +<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>          ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>              this.getRegionServerServices().getServerName()));<a name="line.4299"></a>
 <span class="sourceLineNo">4300</span>    }<a name="line.4300"></a>
 <span class="sourceLineNo">4301</span>  }<a name="line.4301"></a>
 <span class="sourceLineNo">4302</span><a name="line.4302"></a>
@@ -8610,7 +8610,8 @@
 <span class="sourceLineNo">8602</span>  public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8602"></a>
 <span class="sourceLineNo">8603</span>    requestFlush0(tracker);<a name="line.8603"></a>
 <span class="sourceLineNo">8604</span>  }<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span>}<a name="line.8605"></a>
+<span class="sourceLineNo">8605</span><a name="line.8605"></a>
+<span class="sourceLineNo">8606</span>}<a name="line.8606"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.html
index 7d27402..3da432b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.html
@@ -2560,8 +2560,8 @@
 <span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>    MemStoreSize mss = this.memStoreSizing.getMemStoreSize();<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>    LOG.info("Flushing " + + storesToFlush.size() + "/" + stores.size() + " column families," +<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        " memstore data size=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        " memstore heap size=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
+<span class="sourceLineNo">2555</span>        " dataSize=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>        " heapSize=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>        ((perCfExtras != null &amp;&amp; perCfExtras.length() &gt; 0)? perCfExtras.toString(): "") +<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>        ((wal != null) ? "" : "; WAL is null, using passed sequenceid=" + sequenceId));<a name="line.2558"></a>
 <span class="sourceLineNo">2559</span>  }<a name="line.2559"></a>
@@ -2761,10 +2761,10 @@
 <span class="sourceLineNo">2753</span>    long time = EnvironmentEdgeManager.currentTime() - startTime;<a name="line.2753"></a>
 <span class="sourceLineNo">2754</span>    MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2754"></a>
 <span class="sourceLineNo">2755</span>    long memstoresize = this.memStoreSizing.getMemStoreSize().getDataSize();<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    String msg = "Finished memstore flush;"<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        + " data size ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        + ", heap size ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        + ", currentsize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
+<span class="sourceLineNo">2756</span>    String msg = "Finished flush of"<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        + " dataSize ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>        + ", heapSize ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>        + ", currentSize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>        + " for " + this.getRegionInfo().getEncodedName() + " in " + time + "ms, sequenceid="<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span>        + flushOpSeqId +  ", compaction requested=" + compactionRequested<a name="line.2761"></a>
 <span class="sourceLineNo">2762</span>        + ((wal == null) ? "; wal=null" : "");<a name="line.2762"></a>
@@ -4244,7 +4244,7 @@
 <span class="sourceLineNo">4236</span>   * @param cellItr<a name="line.4236"></a>
 <span class="sourceLineNo">4237</span>   * @param now<a name="line.4237"></a>
 <span class="sourceLineNo">4238</span>   */<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>  public void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
+<span class="sourceLineNo">4239</span>  private static void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
 <span class="sourceLineNo">4240</span>      throws IOException {<a name="line.4240"></a>
 <span class="sourceLineNo">4241</span>    for (List&lt;Cell&gt; cells: cellItr) {<a name="line.4241"></a>
 <span class="sourceLineNo">4242</span>      if (cells == null) continue;<a name="line.4242"></a>
@@ -4299,12 +4299,12 @@
 <span class="sourceLineNo">4291</span>      requestFlush();<a name="line.4291"></a>
 <span class="sourceLineNo">4292</span>      // Don't print current limit because it will vary too much. The message is used as a key<a name="line.4292"></a>
 <span class="sourceLineNo">4293</span>      // over in RetriesExhaustedWithDetailsException processing.<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit; regionName=" +<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span>          ", server=" + (this.getRegionServerServices() == null ? "unknown":<a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>          this.getRegionServerServices().getServerName()) +<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>          ", blockingMemStoreSize=" +<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>          org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(blockingMemStoreSize));<a name="line.4299"></a>
+<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit=" +<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>        org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(this.blockingMemStoreSize) +<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>        ", regionName=" +<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>          ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>              this.getRegionServerServices().getServerName()));<a name="line.4299"></a>
 <span class="sourceLineNo">4300</span>    }<a name="line.4300"></a>
 <span class="sourceLineNo">4301</span>  }<a name="line.4301"></a>
 <span class="sourceLineNo">4302</span><a name="line.4302"></a>
@@ -8610,7 +8610,8 @@
 <span class="sourceLineNo">8602</span>  public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8602"></a>
 <span class="sourceLineNo">8603</span>    requestFlush0(tracker);<a name="line.8603"></a>
 <span class="sourceLineNo">8604</span>  }<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span>}<a name="line.8605"></a>
+<span class="sourceLineNo">8605</span><a name="line.8605"></a>
+<span class="sourceLineNo">8606</span>}<a name="line.8606"></a>
 
 
 


[49/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/apidocs/src-html/org/apache/hadoop/hbase/ServerName.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/ServerName.html b/apidocs/src-html/org/apache/hadoop/hbase/ServerName.html
index ba6f5fd..f9b4f3e 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/ServerName.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/ServerName.html
@@ -241,186 +241,190 @@
 <span class="sourceLineNo">233</span>    return this.address.getHostname();<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>  public int getPort() {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    return this.address.getPort();<a name="line.237"></a>
+<span class="sourceLineNo">236</span>  public String getHostnameLowerCase() {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    return this.address.getHostname().toLowerCase(Locale.ROOT);<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>  public long getStartcode() {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    return startcode;<a name="line.241"></a>
+<span class="sourceLineNo">240</span>  public int getPort() {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    return this.address.getPort();<a name="line.241"></a>
 <span class="sourceLineNo">242</span>  }<a name="line.242"></a>
 <span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * For internal use only.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * @param hostName<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * @param port<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * @param startcode<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * @return Server name made of the concatenation of hostname, port and<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * startcode formatted as &lt;code&gt;&amp;lt;hostname&amp;gt; ',' &amp;lt;port&amp;gt; ',' &amp;lt;startcode&amp;gt;&lt;/code&gt;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @deprecated Since 2.0. Use {@link ServerName#valueOf(String, int, long)} instead.<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   */<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  @Deprecated<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  // TODO: Make this private in hbase-3.0.<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  static String getServerName(String hostName, int port, long startcode) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    final StringBuilder name = new StringBuilder(hostName.length() + 1 + 5 + 1 + 13);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    name.append(hostName.toLowerCase(Locale.ROOT));<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    name.append(SERVERNAME_SEPARATOR);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    name.append(port);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    name.append(SERVERNAME_SEPARATOR);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    name.append(startcode);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    return name.toString();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  }<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>   * @param hostAndPort String in form of &amp;lt;hostname&amp;gt; ':' &amp;lt;port&amp;gt;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * @param startcode<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @return Server name made of the concatenation of hostname, port and<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * startcode formatted as &lt;code&gt;&amp;lt;hostname&amp;gt; ',' &amp;lt;port&amp;gt; ',' &amp;lt;startcode&amp;gt;&lt;/code&gt;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * @deprecated Since 2.0. Use {@link ServerName#valueOf(String, long)} instead.<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   */<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  @Deprecated<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  public static String getServerName(final String hostAndPort,<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      final long startcode) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    int index = hostAndPort.indexOf(":");<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    if (index &lt;= 0) throw new IllegalArgumentException("Expected &lt;hostname&gt; ':' &lt;port&gt;");<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return getServerName(hostAndPort.substring(0, index),<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      Integer.parseInt(hostAndPort.substring(index + 1)), startcode);<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>   * @return Hostname and port formatted as described at<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * {@link Addressing#createHostAndPortStr(String, int)}<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * @deprecated Since 2.0. Use {@link #getAddress()} instead.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   */<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  @Deprecated<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  public String getHostAndPort() {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    return this.address.toString();<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>  public Address getAddress() {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    return this.address;<a name="line.292"></a>
+<span class="sourceLineNo">244</span>  public long getStartcode() {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    return startcode;<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>   * For internal use only.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * @param hostName<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * @param port<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * @param startcode<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   * @return Server name made of the concatenation of hostname, port and<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * startcode formatted as &lt;code&gt;&amp;lt;hostname&amp;gt; ',' &amp;lt;port&amp;gt; ',' &amp;lt;startcode&amp;gt;&lt;/code&gt;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   * @deprecated Since 2.0. Use {@link ServerName#valueOf(String, int, long)} instead.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   */<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  @Deprecated<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  // TODO: Make this private in hbase-3.0.<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  static String getServerName(String hostName, int port, long startcode) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    final StringBuilder name = new StringBuilder(hostName.length() + 1 + 5 + 1 + 13);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    name.append(hostName.toLowerCase(Locale.ROOT));<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    name.append(SERVERNAME_SEPARATOR);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    name.append(port);<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    name.append(SERVERNAME_SEPARATOR);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    name.append(startcode);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    return name.toString();<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>   * @param hostAndPort String in form of &amp;lt;hostname&amp;gt; ':' &amp;lt;port&amp;gt;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * @param startcode<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * @return Server name made of the concatenation of hostname, port and<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * startcode formatted as &lt;code&gt;&amp;lt;hostname&amp;gt; ',' &amp;lt;port&amp;gt; ',' &amp;lt;startcode&amp;gt;&lt;/code&gt;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * @deprecated Since 2.0. Use {@link ServerName#valueOf(String, long)} instead.<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  @Deprecated<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  public static String getServerName(final String hostAndPort,<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      final long startcode) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    int index = hostAndPort.indexOf(":");<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    if (index &lt;= 0) throw new IllegalArgumentException("Expected &lt;hostname&gt; ':' &lt;port&gt;");<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    return getServerName(hostAndPort.substring(0, index),<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      Integer.parseInt(hostAndPort.substring(index + 1)), startcode);<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>  /**<a name="line.285"></a>
+<span class="sourceLineNo">286</span>   * @return Hostname and port formatted as described at<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * {@link Addressing#createHostAndPortStr(String, int)}<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * @deprecated Since 2.0. Use {@link #getAddress()} instead.<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  @Deprecated<a name="line.290"></a>
+<span class="sourceLineNo">291</span>  public String getHostAndPort() {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return this.address.toString();<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>   * @param serverName ServerName in form specified by {@link #getServerName()}<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @return The server start code parsed from &lt;code&gt;servername&lt;/code&gt;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @deprecated Since 2.0. Use instance of ServerName to pull out start code.<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  @Deprecated<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  public static long getServerStartcodeFromServerName(final String serverName) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    int index = serverName.lastIndexOf(SERVERNAME_SEPARATOR);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    return Long.parseLong(serverName.substring(index + 1));<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>  /**<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   * Utility method to excise the start code from a server name<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * @param inServerName full server name<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * @return server name less its start code<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * @deprecated Since 2.0. Use {@link #getAddress()}<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   */<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  @Deprecated<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public static String getServerNameLessStartCode(String inServerName) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    if (inServerName != null &amp;&amp; inServerName.length() &gt; 0) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      int index = inServerName.lastIndexOf(SERVERNAME_SEPARATOR);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      if (index &gt; 0) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        return inServerName.substring(0, index);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    return inServerName;<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 int compareTo(ServerName other) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    int compare;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    if (other == null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      return -1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    if (this.getHostname() == null) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      if (other.getHostname() != null) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        return 1;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    } else {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      if (other.getHostname() == null) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>        return -1;<a name="line.335"></a>
+<span class="sourceLineNo">295</span>  public Address getAddress() {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return this.address;<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>  /**<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @param serverName ServerName in form specified by {@link #getServerName()}<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * @return The server start code parsed from &lt;code&gt;servername&lt;/code&gt;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * @deprecated Since 2.0. Use instance of ServerName to pull out start code.<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   */<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  @Deprecated<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public static long getServerStartcodeFromServerName(final String serverName) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    int index = serverName.lastIndexOf(SERVERNAME_SEPARATOR);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return Long.parseLong(serverName.substring(index + 1));<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>   * Utility method to excise the start code from a server name<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * @param inServerName full server name<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * @return server name less its start code<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * @deprecated Since 2.0. Use {@link #getAddress()}<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   */<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  @Deprecated<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  public static String getServerNameLessStartCode(String inServerName) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    if (inServerName != null &amp;&amp; inServerName.length() &gt; 0) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      int index = inServerName.lastIndexOf(SERVERNAME_SEPARATOR);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      if (index &gt; 0) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        return inServerName.substring(0, index);<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>    return inServerName;<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 compareTo(ServerName other) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    int compare;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    if (other == null) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      return -1;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    if (this.getHostname() == null) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      if (other.getHostname() != null) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        return 1;<a name="line.335"></a>
 <span class="sourceLineNo">336</span>      }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      compare = this.getHostname().compareToIgnoreCase(other.getHostname());<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      if (compare != 0) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        return compare;<a name="line.339"></a>
+<span class="sourceLineNo">337</span>    } else {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      if (other.getHostname() == null) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        return -1;<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>    compare = this.getPort() - other.getPort();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    if (compare != 0) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      return compare;<a name="line.344"></a>
+<span class="sourceLineNo">341</span>      compare = this.getHostname().compareToIgnoreCase(other.getHostname());<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      if (compare != 0) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        return compare;<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>    return Long.compare(this.getStartcode(), other.getStartcode());<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 hashCode() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    return getServerName().hashCode();<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 boolean equals(Object o) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    if (this == o) return true;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    if (o == null) return false;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    if (!(o instanceof ServerName)) return false;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    return this.compareTo((ServerName)o) == 0;<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>   * @param left<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * @param right<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * @return True if &lt;code&gt;other&lt;/code&gt; has same hostname and port.<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   */<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  public static boolean isSameAddress(final ServerName left,<a name="line.367"></a>
-<span class="sourceLineNo">368</span>                                      final ServerName right) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    // TODO: Make this left.getAddress().equals(right.getAddress())<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    if (left == null) return false;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    if (right == null) return false;<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    return left.getHostname().compareToIgnoreCase(right.getHostname()) == 0 &amp;&amp;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      left.getPort() == right.getPort();<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>   * Use this method instantiating a {@link ServerName} from bytes<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   * gotten from a call to {@link #getVersionedBytes()}.  Will take care of the<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * case where bytes were written by an earlier version of hbase.<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   * @param versionedBytes Pass bytes gotten from a call to {@link #getVersionedBytes()}<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * @return A ServerName instance.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * @see #getVersionedBytes()<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   */<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  public static ServerName parseVersionedServerName(final byte [] versionedBytes) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    // Version is a short.<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    short version = Bytes.toShort(versionedBytes);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    if (version == VERSION) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      int length = versionedBytes.length - Bytes.SIZEOF_SHORT;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      return valueOf(Bytes.toString(versionedBytes, Bytes.SIZEOF_SHORT, length));<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    // Presume the bytes were written with an old version of hbase and that the<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    // bytes are actually a String of the form "'&lt;hostname&gt;' ':' '&lt;port&gt;'".<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    return valueOf(Bytes.toString(versionedBytes), NON_STARTCODE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
-<span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span>  /**<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * @param str Either an instance of {@link ServerName#toString()} or a<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * "'&amp;lt;hostname&amp;gt;' ':' '&amp;lt;port&amp;gt;'".<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * @return A ServerName instance.<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   */<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  public static ServerName parseServerName(final String str) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return SERVERNAME_PATTERN.matcher(str).matches()? valueOf(str) :<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        valueOf(str, NON_STARTCODE);<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><a name="line.406"></a>
-<span class="sourceLineNo">407</span>  /**<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   * @return true if the String follows the pattern of {@link ServerName#toString()}, false<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   *  otherwise.<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  public static boolean isFullServerName(final String str){<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    if (str == null ||str.isEmpty()) return false;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    return SERVERNAME_PATTERN.matcher(str).matches();<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">346</span>    compare = this.getPort() - other.getPort();<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    if (compare != 0) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      return compare;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    return Long.compare(this.getStartcode(), other.getStartcode());<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>  @Override<a name="line.353"></a>
+<span class="sourceLineNo">354</span>  public int hashCode() {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    return getServerName().hashCode();<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  }<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span>  @Override<a name="line.358"></a>
+<span class="sourceLineNo">359</span>  public boolean equals(Object o) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    if (this == o) return true;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    if (o == null) return false;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    if (!(o instanceof ServerName)) return false;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    return this.compareTo((ServerName)o) == 0;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  }<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>   * @param left<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * @param right<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * @return True if &lt;code&gt;other&lt;/code&gt; has same hostname and port.<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   */<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  public static boolean isSameAddress(final ServerName left,<a name="line.371"></a>
+<span class="sourceLineNo">372</span>                                      final ServerName right) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    // TODO: Make this left.getAddress().equals(right.getAddress())<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    if (left == null) return false;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    if (right == null) return false;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    return left.getHostname().compareToIgnoreCase(right.getHostname()) == 0 &amp;&amp;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      left.getPort() == right.getPort();<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>  /**<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * Use this method instantiating a {@link ServerName} from bytes<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * gotten from a call to {@link #getVersionedBytes()}.  Will take care of the<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * case where bytes were written by an earlier version of hbase.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * @param versionedBytes Pass bytes gotten from a call to {@link #getVersionedBytes()}<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * @return A ServerName instance.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   * @see #getVersionedBytes()<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   */<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  public static ServerName parseVersionedServerName(final byte [] versionedBytes) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    // Version is a short.<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    short version = Bytes.toShort(versionedBytes);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    if (version == VERSION) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      int length = versionedBytes.length - Bytes.SIZEOF_SHORT;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return valueOf(Bytes.toString(versionedBytes, Bytes.SIZEOF_SHORT, length));<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    // Presume the bytes were written with an old version of hbase and that the<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    // bytes are actually a String of the form "'&lt;hostname&gt;' ':' '&lt;port&gt;'".<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    return valueOf(Bytes.toString(versionedBytes), NON_STARTCODE);<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>  /**<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   * @param str Either an instance of {@link ServerName#toString()} or a<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * "'&amp;lt;hostname&amp;gt;' ':' '&amp;lt;port&amp;gt;'".<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * @return A ServerName instance.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  public static ServerName parseServerName(final String str) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    return SERVERNAME_PATTERN.matcher(str).matches()? valueOf(str) :<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        valueOf(str, NON_STARTCODE);<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><a name="line.410"></a>
+<span class="sourceLineNo">411</span>  /**<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * @return true if the String follows the pattern of {@link ServerName#toString()}, false<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   *  otherwise.<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  public static boolean isFullServerName(final String str){<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    if (str == null ||str.isEmpty()) return false;<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    return SERVERNAME_PATTERN.matcher(str).matches();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>}<a name="line.419"></a>
 
 
 


[33/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/wal/WALFactory.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALFactory.html b/devapidocs/org/apache/hadoop/hbase/wal/WALFactory.html
index ed1e28c..5e5b452 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALFactory.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALFactory.html
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.60">WALFactory</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.62">WALFactory</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">Entry point for users of the Write Ahead Log.
  Acts as the shim between internal use and the particular WALProvider we use to handle wal
@@ -120,9 +120,11 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  implementations:
  <ul>
    <li><em>defaultProvider</em> : whatever provider is standard for the hbase version. Currently
-                                  "filesystem"</li>
+                                  "asyncfs"</li>
+   <li><em>asyncfs</em> : a provider that will run on top of an implementation of the Hadoop
+                             FileSystem interface via an asynchronous client.</li>
    <li><em>filesystem</em> : a provider that will run on top of an implementation of the Hadoop
-                             FileSystem interface, normally HDFS.</li>
+                             FileSystem interface via HDFS's synchronous DFSClient.</li>
    <li><em>multiwal</em> : a provider that will use multiple "filesystem" wal instances per region
                            server.</li>
  </ul>
@@ -419,7 +421,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <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/wal/WALFactory.html#line.62">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.64">LOG</a></pre>
 </li>
 </ul>
 <a name="WAL_PROVIDER">
@@ -428,7 +430,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>WAL_PROVIDER</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/wal/WALFactory.html#line.79">WAL_PROVIDER</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/wal/WALFactory.html#line.81">WAL_PROVIDER</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.wal.WALFactory.WAL_PROVIDER">Constant Field Values</a></dd>
@@ -441,7 +443,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WAL_PROVIDER</h4>
-<pre>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/wal/WALFactory.html#line.80">DEFAULT_WAL_PROVIDER</a></pre>
+<pre>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/wal/WALFactory.html#line.82">DEFAULT_WAL_PROVIDER</a></pre>
 </li>
 </ul>
 <a name="META_WAL_PROVIDER">
@@ -450,7 +452,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>META_WAL_PROVIDER</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/wal/WALFactory.html#line.82">META_WAL_PROVIDER</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/wal/WALFactory.html#line.84">META_WAL_PROVIDER</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.wal.WALFactory.META_WAL_PROVIDER">Constant Field Values</a></dd>
@@ -463,7 +465,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_META_WAL_PROVIDER</h4>
-<pre>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/wal/WALFactory.html#line.83">DEFAULT_META_WAL_PROVIDER</a></pre>
+<pre>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/wal/WALFactory.html#line.85">DEFAULT_META_WAL_PROVIDER</a></pre>
 </li>
 </ul>
 <a name="factoryId">
@@ -472,7 +474,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>factoryId</h4>
-<pre>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/wal/WALFactory.html#line.85">factoryId</a></pre>
+<pre>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/wal/WALFactory.html#line.87">factoryId</a></pre>
 </li>
 </ul>
 <a name="provider">
@@ -481,7 +483,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>provider</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.86">provider</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.88">provider</a></pre>
 </li>
 </ul>
 <a name="metaProvider">
@@ -490,7 +492,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>metaProvider</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;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.90">metaProvider</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;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.92">metaProvider</a></pre>
 </li>
 </ul>
 <a name="logReaderClass">
@@ -499,7 +501,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>logReaderClass</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.Reader.html" title="interface in org.apache.hadoop.hbase.wal">AbstractFSWALProvider.Reader</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.95">logReaderClass</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.Reader.html" title="interface in org.apache.hadoop.hbase.wal">AbstractFSWALProvider.Reader</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.97">logReaderClass</a></pre>
 <div class="block">Configuration-specified WAL Reader used when a custom reader is requested</div>
 </li>
 </ul>
@@ -509,7 +511,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>timeoutMillis</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.100">timeoutMillis</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.102">timeoutMillis</a></pre>
 <div class="block">How long to attempt opening in-recovery wals</div>
 </li>
 </ul>
@@ -519,7 +521,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.102">conf</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.104">conf</a></pre>
 </li>
 </ul>
 <a name="singleton">
@@ -528,7 +530,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>singleton</h4>
-<pre>private static 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;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.363">singleton</a></pre>
+<pre>private static 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;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.365">singleton</a></pre>
 </li>
 </ul>
 <a name="SINGLETON_ID">
@@ -537,7 +539,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SINGLETON_ID</h4>
-<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/wal/WALFactory.html#line.364">SINGLETON_ID</a></pre>
+<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/wal/WALFactory.html#line.366">SINGLETON_ID</a></pre>
 </li>
 </ul>
 </li>
@@ -554,7 +556,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>WALFactory</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.105">WALFactory</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.107">WALFactory</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 <a name="WALFactory-org.apache.hadoop.conf.Configuration-java.lang.String-">
@@ -563,7 +565,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALFactory</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.164">WALFactory</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.166">WALFactory</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                   <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;factoryId)
            throws <a href="https://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>
@@ -591,7 +593,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getProviderClass</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.122">getProviderClass</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;key,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.124">getProviderClass</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;key,
                                                      <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;defaultValue)</pre>
 </li>
 </ul>
@@ -601,7 +603,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createProvider</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.133">createProvider</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&gt;&nbsp;clazz,
+<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.135">createProvider</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&gt;&nbsp;clazz,
                            <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;providerId)
                     throws <a href="https://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>
@@ -616,7 +618,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getProvider</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.151">getProvider</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;key,
+<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.153">getProvider</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;key,
                         <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;defaultValue,
                         <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;providerId)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -634,7 +636,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.189">close</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.191">close</a>()
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Shutdown all WALs and clean up any underlying storage.
  Use only when you will not need to replay and edits that have gone to any wals from this
@@ -651,7 +653,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.206">shutdown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.208">shutdown</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">Tell the underlying WAL providers to shut down, but do not clean up underlying storage.
  If you are not ending cleanly and will need to replay edits from this factory's wals,
@@ -668,7 +670,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALs</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="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.222">getWALs</a>()</pre>
+<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="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.224">getWALs</a>()</pre>
 </li>
 </ul>
 <a name="getMetaProvider--">
@@ -677,7 +679,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaProvider</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.226">getMetaProvider</a>()
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.228">getMetaProvider</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>
@@ -691,7 +693,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getWAL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.246">getWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.248">getWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</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="paramLabel">Parameters:</span></dt>
@@ -707,7 +709,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createReader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.256">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.258">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                org.apache.hadoop.fs.Path&nbsp;path)
                         throws <a href="https://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>
@@ -722,7 +724,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createReader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.267">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.269">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                org.apache.hadoop.fs.Path&nbsp;path,
                                <a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -743,7 +745,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createReader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.272">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.274">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                org.apache.hadoop.fs.Path&nbsp;path,
                                <a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter,
                                boolean&nbsp;allowCustom)
@@ -760,7 +762,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createWALWriter</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.344">createWALWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.346">createWALWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                           org.apache.hadoop.fs.Path&nbsp;path)
                                    throws <a href="https://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 writer for the WAL.
@@ -782,7 +784,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createRecoveredEditsWriter</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.354">createRecoveredEditsWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.356">createRecoveredEditsWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                      org.apache.hadoop.fs.Path&nbsp;path)
                                               throws <a href="https://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">Should be package-private, visible for recovery testing.
@@ -801,7 +803,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getInstance</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.367">getInstance</a>(org.apache.hadoop.conf.Configuration&nbsp;configuration)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.369">getInstance</a>(org.apache.hadoop.conf.Configuration&nbsp;configuration)</pre>
 </li>
 </ul>
 <a name="createReader-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.conf.Configuration-">
@@ -810,7 +812,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createReader</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.391">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.393">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                       org.apache.hadoop.fs.Path&nbsp;path,
                                       org.apache.hadoop.conf.Configuration&nbsp;configuration)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -830,7 +832,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createReader</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.401">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.403">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                org.apache.hadoop.fs.Path&nbsp;path,
                                org.apache.hadoop.conf.Configuration&nbsp;configuration,
                                <a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)
@@ -851,7 +853,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createReaderIgnoreCustomClass</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.412">createReaderIgnoreCustomClass</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.414">createReaderIgnoreCustomClass</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                        org.apache.hadoop.fs.Path&nbsp;path,
                                                        org.apache.hadoop.conf.Configuration&nbsp;configuration)
                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -872,7 +874,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createRecoveredEditsWriter</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.422">createRecoveredEditsWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.424">createRecoveredEditsWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                      org.apache.hadoop.fs.Path&nbsp;path,
                                                      org.apache.hadoop.conf.Configuration&nbsp;configuration)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -892,7 +894,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createWALWriter</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.434">createWALWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.436">createWALWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                  org.apache.hadoop.fs.Path&nbsp;path,
                                                  org.apache.hadoop.conf.Configuration&nbsp;configuration)
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -912,7 +914,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALProvider</h4>
-<pre>public final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.440">getWALProvider</a>()</pre>
+<pre>public final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.442">getWALProvider</a>()</pre>
 </li>
 </ul>
 <a name="getMetaWALProvider--">
@@ -921,7 +923,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getMetaWALProvider</h4>
-<pre>public final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.444">getMetaWALProvider</a>()</pre>
+<pre>public final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.446">getMetaWALProvider</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index c0e28b4..9ec5b35 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -189,8 +189,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/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/overview-tree.html b/devapidocs/overview-tree.html
index c041c38..0fea3db 100644
--- a/devapidocs/overview-tree.html
+++ b/devapidocs/overview-tree.html
@@ -759,6 +759,7 @@
 <li type="circle">org.apache.hadoop.hbase.client.coprocessor.<a href="org/apache/hadoop/hbase/client/coprocessor/Batch.html" title="class in org.apache.hadoop.hbase.client.coprocessor"><span class="typeNameLink">Batch</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/BatchErrors.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">BatchErrors</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/BatchScanResultCache.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">BatchScanResultCache</span></a> (implements org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ScanResultCache.html" title="interface in org.apache.hadoop.hbase.client">ScanResultCache</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/BBKVComparator.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">BBKVComparator</span></a> (implements java.util.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheKey</span></a> (implements org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, 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>)</li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/BlockCachesIterator.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCachesIterator</span></a> (implements java.util.<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;E&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheUtil</span></a></li>
@@ -1967,7 +1968,7 @@
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="org/apache/hadoop/hbase/thrift/IncrementCoalescer.DaemonThreadFactory.html" title="class in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">IncrementCoalescer.DaemonThreadFactory</span></a> (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="org/apache/hadoop/hbase/thrift/IncrementCoalescer.FullyQualifiedRow.html" title="class in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">IncrementCoalescer.FullyQualifiedRow</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/IncrementingEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">IncrementingEnvironmentEdge</span></a> (implements org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/EnvironmentEdge.html" title="interface in org.apache.hadoop.hbase.util">EnvironmentEdge</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/IndividualBytesFieldCell.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">IndividualBytesFieldCell</span></a> (implements org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/IndividualBytesFieldCell.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">IndividualBytesFieldCell</span></a> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.http.<a href="org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http"><span class="typeNameLink">InfoServer</span></a></li>
 <li type="circle">org.apache.hadoop.mapreduce.InputFormat&lt;K,V&gt;
 <ul>
@@ -2056,7 +2057,7 @@
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/KeyLocker.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">KeyLocker</span></a>&lt;K&gt;</li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/KeyOnlyFilter.KeyOnlyCell.html" title="class in org.apache.hadoop.hbase.filter"><span class="typeNameLink">KeyOnlyFilter.KeyOnlyCell</span></a> (implements org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.io.crypto.<a href="org/apache/hadoop/hbase/io/crypto/KeyStoreKeyProvider.html" title="class in org.apache.hadoop.hbase.io.crypto"><span class="typeNameLink">KeyStoreKeyProvider</span></a> (implements org.apache.hadoop.hbase.io.crypto.<a href="org/apache/hadoop/hbase/io/crypto/KeyProvider.html" title="interface in org.apache.hadoop.hbase.io.crypto">KeyProvider</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue</span></a> (implements org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>)
+<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue</span></a> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.KeyOnlyKeyValue</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/NoTagsKeyValue.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">NoTagsKeyValue</span></a></li>
@@ -4552,10 +4553,10 @@
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Cancellable.html" title="interface in org.apache.hadoop.hbase.client"><span class="typeNameLink">Cancellable</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">Cell</span></a>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">ExtendedCell</span></a> (also extends java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">ExtendedCell</span></a> (also extends org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">RawCell</span></a>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">ExtendedCell</span></a> (also extends java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">ExtendedCell</span></a> (also extends org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>)</li>
 </ul>
 </li>
 </ul>
@@ -4598,7 +4599,6 @@
 <li type="circle">org.apache.hadoop.hbase.client.backoff.<a href="org/apache/hadoop/hbase/client/backoff/ClientBackoffPolicy.html" title="interface in org.apache.hadoop.hbase.client.backoff"><span class="typeNameLink">ClientBackoffPolicy</span></a></li>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Cloneable</span></a>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">ExtendedCell</span></a> (also extends org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/MonitoredRPCHandler.html" title="interface in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredRPCHandler</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask</span></a>
 <ul>
@@ -4756,7 +4756,7 @@
 <li type="circle">org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io"><span class="typeNameLink">HeapSize</span></a>
 <ul>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">ExtendedCell</span></a> (also extends java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">ExtendedCell</span></a> (also extends org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/RegionSize.html" title="interface in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RegionSize</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RegionSizeStore</span></a> (also extends java.lang.<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;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/SizedCellScanner.html" title="interface in org.apache.hadoop.hbase.io"><span class="typeNameLink">SizedCellScanner</span></a> (also extends org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>)</li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/BBKVComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/BBKVComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/BBKVComparator.html
new file mode 100644
index 0000000..4b39eca
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/BBKVComparator.html
@@ -0,0 +1,245 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.util.Comparator;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hbase.thirdparty.com.google.common.primitives.Longs;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.slf4j.Logger;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.slf4j.LoggerFactory;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>/**<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * A comparator for case where {@link ByteBufferKeyValue} is prevalent type (BBKV<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * is base-type in hbase2). Takes a general comparator as fallback in case types are NOT the<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * expected ByteBufferKeyValue.<a name="line.32"></a>
+<span class="sourceLineNo">033</span> *<a name="line.33"></a>
+<span class="sourceLineNo">034</span> * &lt;p&gt;This is a tricked-out Comparator at heart of hbase read and write. It is in<a name="line.34"></a>
+<span class="sourceLineNo">035</span> * the HOT path so we try all sorts of ugly stuff so we can go faster. See below<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * in this javadoc comment for the list.<a name="line.36"></a>
+<span class="sourceLineNo">037</span> *<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * &lt;p&gt;Apply this comparator narrowly so it is fed exclusively ByteBufferKeyValues<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * as much as is possible so JIT can settle (e.g. make one per ConcurrentSkipListMap<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * in HStore).<a name="line.40"></a>
+<span class="sourceLineNo">041</span> *<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * &lt;p&gt;Exploits specially added methods in BBKV to save on deserializations of shorts,<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * longs, etc: i.e. calculating the family length requires row length; pass it in<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * rather than recalculate it, and so on.<a name="line.44"></a>
+<span class="sourceLineNo">045</span> *<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * &lt;p&gt;This comparator does static dispatch to private final methods so hotspot is comfortable<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * deciding inline.<a name="line.47"></a>
+<span class="sourceLineNo">048</span> *<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * &lt;p&gt;Measurement has it that we almost have it so all inlines from memstore<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * ConcurrentSkipListMap on down to the (unsafe) intrinisics that do byte compare<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * and deserialize shorts and ints; needs a bit more work.<a name="line.51"></a>
+<span class="sourceLineNo">052</span> *<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * &lt;p&gt;Does not take a Type to compare: i.e. it is not a Comparator&amp;lt;Cell&gt; or<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * CellComparator&amp;lt;Cell&gt; or Comparator&amp;lt;ByteBufferKeyValue&gt; because that adds<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * another method to the hierarchy -- from compare(Object, Object)<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * to dynamic compare(Cell, Cell) to static private compare -- and inlining doesn't happen if<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * hierarchy is too deep (it is the case here).<a name="line.57"></a>
+<span class="sourceLineNo">058</span> *<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * &lt;p&gt;Be careful making changes. Compare perf before and after and look at what<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * hotspot ends up generating before committing change (jitwatch is helpful here).<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * Changing this one class doubled write throughput (HBASE-20483).<a name="line.61"></a>
+<span class="sourceLineNo">062</span> */<a name="line.62"></a>
+<span class="sourceLineNo">063</span>@InterfaceAudience.Private<a name="line.63"></a>
+<span class="sourceLineNo">064</span>public class BBKVComparator implements Comparator {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  protected static final Logger LOG = LoggerFactory.getLogger(BBKVComparator.class);<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private final Comparator fallback;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  public BBKVComparator(Comparator fallback) {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    this.fallback = fallback;<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 int compare(Object l, Object r) {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    // LOG.info("ltype={} rtype={}", l, r);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    if ((l instanceof ByteBufferKeyValue) &amp;&amp; (r instanceof ByteBufferKeyValue)) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      return compare((ByteBufferKeyValue)l, (ByteBufferKeyValue)r);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    }<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    // Skip calling compare(Object, Object) and go direct to compare(Cell, Cell)<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    return this.fallback.compare((Cell)l, (Cell)r);<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>  // TODO: Come back here. We get a few percentage points extra of throughput if this is a<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  // private method.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  static final int compare(ByteBufferKeyValue left, ByteBufferKeyValue right) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    // NOTE: Same method is in CellComparatorImpl, also private, not shared, intentionally. Not<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    // sharing gets us a few percent more throughput in compares. If changes here or there, make<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    // sure done in both places.<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>    // Compare Rows. Cache row length.<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    int leftRowLength = left.getRowLength();<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    int rightRowLength = right.getRowLength();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    int diff = ByteBufferUtils.compareTo(left.getRowByteBuffer(), left.getRowPosition(),<a name="line.92"></a>
+<span class="sourceLineNo">093</span>        leftRowLength,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>        right.getRowByteBuffer(), right.getRowPosition(), rightRowLength);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    if (diff != 0) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      return diff;<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 the column is not specified, the "minimum" key type appears as latest in the sorted<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    // order, regardless of the timestamp. This is used for specifying the last key/value in a<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    // given row, because there is no "lexicographically last column" (it would be infinitely long).<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    // The "maximum" key type does not need this behavior. Copied from KeyValue. This is bad in that<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    // we can't do memcmp w/ special rules like this.<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    // TODO: Is there a test for this behavior?<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    int leftFamilyLengthPosition = left.getFamilyLengthPosition(leftRowLength);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    int leftFamilyLength = left.getFamilyLength(leftFamilyLengthPosition);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    int leftKeyLength = left.getKeyLength();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    int leftQualifierLength = left.getQualifierLength(leftKeyLength, leftRowLength,<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        leftFamilyLength);<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>    // No need of left row length below here.<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>    byte leftType = left.getTypeByte(leftKeyLength);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    if (leftFamilyLength + leftQualifierLength == 0 &amp;&amp;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        leftType == KeyValue.Type.Minimum.getCode()) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      // left is "bigger", i.e. it appears later in the sorted order<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      return 1;<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>    int rightFamilyLengthPosition = right.getFamilyLengthPosition(rightRowLength);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    int rightFamilyLength = right.getFamilyLength(rightFamilyLengthPosition);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    int rightKeyLength = right.getKeyLength();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    int rightQualifierLength = right.getQualifierLength(rightKeyLength, rightRowLength,<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        rightFamilyLength);<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>   // No need of right row length below here.<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>    byte rightType = right.getTypeByte(rightKeyLength);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    if (rightFamilyLength + rightQualifierLength == 0 &amp;&amp;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        rightType == KeyValue.Type.Minimum.getCode()) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      return -1;<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>    // Compare families.<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    int leftFamilyPosition = left.getFamilyPosition(leftFamilyLengthPosition);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    int rightFamilyPosition = right.getFamilyPosition(rightFamilyLengthPosition);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    diff = ByteBufferUtils.compareTo(left.getFamilyByteBuffer(), leftFamilyPosition,<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        leftFamilyLength,<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        right.getFamilyByteBuffer(), rightFamilyPosition, rightFamilyLength);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    if (diff != 0) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      return diff;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>    // Compare qualifiers<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    diff = ByteBufferUtils.compareTo(left.getQualifierByteBuffer(),<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        left.getQualifierPosition(leftFamilyPosition, leftFamilyLength), leftQualifierLength,<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        right.getQualifierByteBuffer(),<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        right.getQualifierPosition(rightFamilyPosition, rightFamilyLength),<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        rightQualifierLength);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (diff != 0) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return diff;<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>    // Timestamps.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    // Swap order we pass into compare so we get DESCENDING order.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    diff = Long.compare(right.getTimestamp(rightKeyLength), left.getTimestamp(leftKeyLength));<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    if (diff != 0) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return diff;<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>    // Compare types. Let the delete types sort ahead of puts; i.e. types<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // of higher numbers sort before those of lesser numbers. Maximum (255)<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    // appears ahead of everything, and minimum (0) appears after<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    // everything.<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    diff = (0xff &amp; rightType) - (0xff &amp; leftType);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    if (diff != 0) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      return diff;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>    // Negate following comparisons so later edits show up first mvccVersion: later sorts first<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return Longs.compare(right.getSequenceId(), left.getSequenceId());<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[37/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
index 29af5bd..31c81b7 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
@@ -218,82 +218,78 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#metrics">metrics</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#peerClusterId">peerClusterId</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code>private <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/replication/regionserver/ReplicationSource.html#peerId">peerId</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <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/replication/regionserver/ReplicationSource.html#queueId">queueId</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <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/util/concurrent/PriorityBlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">PriorityBlockingQueue</a>&lt;org.apache.hadoop.fs.Path&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#queues">queues</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#queueSizePerGroup">queueSizePerGroup</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#queueStorage">queueStorage</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationEndpoint</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#replicationEndpoint">replicationEndpoint</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationPeer</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#replicationPeer">replicationPeer</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueInfo.html" title="class in org.apache.hadoop.hbase.replication">ReplicationQueueInfo</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#replicationQueueInfo">replicationQueueInfo</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#server">server</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#sleepForRetries">sleepForRetries</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#sourceRunning">sourceRunning</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationThrottler</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#throttler">throttler</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#totalBufferUsed">totalBufferUsed</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#totalReplicatedEdits">totalReplicatedEdits</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <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/replication/regionserver/ReplicationSource.html#WAIT_ON_ENDPOINT_SECONDS">WAIT_ON_ENDPOINT_SECONDS</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/replication/regionserver/ReplicationSource.html#waitOnEndpointSeconds">waitOnEndpointSeconds</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/WALEntryFilter.html" title="interface in org.apache.hadoop.hbase.replication">WALEntryFilter</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#walEntryFilter">walEntryFilter</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALFileLengthProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">WALFileLengthProvider</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#walFileLengthProvider">walFileLengthProvider</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</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/replication/regionserver/ReplicationSourceShipper.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#workerThreads">workerThreads</a></span></code>&nbsp;</td>
 </tr>
@@ -450,7 +446,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 </tr>
 <tr id="i22" class="altColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#initializeWALEntryFilter--">initializeWALEntryFilter</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#initializeWALEntryFilter-java.util.UUID-">initializeWALEntryFilter</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&nbsp;peerClusterId)</code>&nbsp;</td>
 </tr>
 <tr id="i23" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
@@ -663,22 +659,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.103">clusterId</a></pre>
 </li>
 </ul>
-<a name="peerClusterId">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>peerClusterId</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.105">peerClusterId</a></pre>
-</li>
-</ul>
 <a name="totalReplicatedEdits">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>totalReplicatedEdits</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.107">totalReplicatedEdits</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.105">totalReplicatedEdits</a></pre>
 </li>
 </ul>
 <a name="queueId">
@@ -687,7 +674,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>queueId</h4>
-<pre>protected&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/replication/regionserver/ReplicationSource.html#line.109">queueId</a></pre>
+<pre>protected&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/replication/regionserver/ReplicationSource.html#line.107">queueId</a></pre>
 </li>
 </ul>
 <a name="maxRetriesMultiplier">
@@ -696,7 +683,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>maxRetriesMultiplier</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.111">maxRetriesMultiplier</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.109">maxRetriesMultiplier</a></pre>
 </li>
 </ul>
 <a name="sourceRunning">
@@ -705,7 +692,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>sourceRunning</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.113">sourceRunning</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.111">sourceRunning</a></pre>
 </li>
 </ul>
 <a name="metrics">
@@ -714,7 +701,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>metrics</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSource</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.115">metrics</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSource</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.113">metrics</a></pre>
 </li>
 </ul>
 <a name="logQueueWarnThreshold">
@@ -723,7 +710,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>logQueueWarnThreshold</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.117">logQueueWarnThreshold</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.115">logQueueWarnThreshold</a></pre>
 </li>
 </ul>
 <a name="replicationEndpoint">
@@ -732,7 +719,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationEndpoint</h4>
-<pre>private volatile&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationEndpoint</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.119">replicationEndpoint</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationEndpoint</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.117">replicationEndpoint</a></pre>
 </li>
 </ul>
 <a name="walEntryFilter">
@@ -741,7 +728,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>walEntryFilter</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/WALEntryFilter.html" title="interface in org.apache.hadoop.hbase.replication">WALEntryFilter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.121">walEntryFilter</a></pre>
+<pre>protected volatile&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/WALEntryFilter.html" title="interface in org.apache.hadoop.hbase.replication">WALEntryFilter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.119">walEntryFilter</a></pre>
 </li>
 </ul>
 <a name="throttler">
@@ -750,7 +737,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>throttler</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationThrottler</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.123">throttler</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationThrottler</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.121">throttler</a></pre>
 </li>
 </ul>
 <a name="defaultBandwidth">
@@ -759,7 +746,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>defaultBandwidth</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.124">defaultBandwidth</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.122">defaultBandwidth</a></pre>
 </li>
 </ul>
 <a name="currentBandwidth">
@@ -768,7 +755,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>currentBandwidth</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.125">currentBandwidth</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.123">currentBandwidth</a></pre>
 </li>
 </ul>
 <a name="walFileLengthProvider">
@@ -777,7 +764,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>walFileLengthProvider</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALFileLengthProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">WALFileLengthProvider</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.126">walFileLengthProvider</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALFileLengthProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">WALFileLengthProvider</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.124">walFileLengthProvider</a></pre>
 </li>
 </ul>
 <a name="workerThreads">
@@ -786,7 +773,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>workerThreads</h4>
-<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</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/replication/regionserver/ReplicationSourceShipper.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.127">workerThreads</a></pre>
+<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</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/replication/regionserver/ReplicationSourceShipper.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.125">workerThreads</a></pre>
 </li>
 </ul>
 <a name="totalBufferUsed">
@@ -795,7 +782,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>totalBufferUsed</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.130">totalBufferUsed</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.128">totalBufferUsed</a></pre>
 </li>
 </ul>
 <a name="WAIT_ON_ENDPOINT_SECONDS">
@@ -804,7 +791,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>WAIT_ON_ENDPOINT_SECONDS</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/replication/regionserver/ReplicationSource.html#line.132">WAIT_ON_ENDPOINT_SECONDS</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/replication/regionserver/ReplicationSource.html#line.130">WAIT_ON_ENDPOINT_SECONDS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.replication.regionserver.ReplicationSource.WAIT_ON_ENDPOINT_SECONDS">Constant Field Values</a></dd>
@@ -817,7 +804,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WAIT_ON_ENDPOINT_SECONDS</h4>
-<pre>public static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.134">DEFAULT_WAIT_ON_ENDPOINT_SECONDS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.132">DEFAULT_WAIT_ON_ENDPOINT_SECONDS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.replication.regionserver.ReplicationSource.DEFAULT_WAIT_ON_ENDPOINT_SECONDS">Constant Field Values</a></dd>
@@ -830,7 +817,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>waitOnEndpointSeconds</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.135">waitOnEndpointSeconds</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.133">waitOnEndpointSeconds</a></pre>
 </li>
 </ul>
 <a name="initThread">
@@ -839,7 +826,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockListLast">
 <li class="blockList">
 <h4>initThread</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.137">initThread</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.135">initThread</a></pre>
 </li>
 </ul>
 </li>
@@ -873,7 +860,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.150">init</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.148">init</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                  org.apache.hadoop.fs.FileSystem&nbsp;fs,
                  <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a>&nbsp;manager,
                  <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a>&nbsp;queueStorage,
@@ -907,7 +894,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>decorateConf</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.186">decorateConf</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.184">decorateConf</a>()</pre>
 </li>
 </ul>
 <a name="enqueueLog-org.apache.hadoop.fs.Path-">
@@ -916,7 +903,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>enqueueLog</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.194">enqueueLog</a>(org.apache.hadoop.fs.Path&nbsp;log)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.192">enqueueLog</a>(org.apache.hadoop.fs.Path&nbsp;log)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#enqueueLog-org.apache.hadoop.fs.Path-">ReplicationSourceInterface</a></code></span></div>
 <div class="block">Add a log to the list of logs to replicate</div>
 <dl>
@@ -933,7 +920,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>addHFileRefs</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.218">addHFileRefs</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.216">addHFileRefs</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[]&nbsp;family,
                          <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="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path&gt;&gt;&nbsp;pairs)
                   throws <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
@@ -958,7 +945,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>createReplicationEndpoint</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationEndpoint</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.239">createReplicationEndpoint</a>()
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationEndpoint</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.237">createReplicationEndpoint</a>()
                                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InstantiationException.html?is-external=true" title="class or interface in java.lang">InstantiationException</a>,
                                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalAccessException.html?is-external=true" title="class or interface in java.lang">IllegalAccessException</a>,
                                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</a>,
@@ -978,7 +965,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>initAndStartReplicationEndpoint</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.272">initAndStartReplicationEndpoint</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationEndpoint</a>&nbsp;replicationEndpoint)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.270">initAndStartReplicationEndpoint</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationEndpoint</a>&nbsp;replicationEndpoint)
                                       throws <a href="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/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent">TimeoutException</a></pre>
 <dl>
@@ -988,13 +975,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 </dl>
 </li>
 </ul>
-<a name="initializeWALEntryFilter--">
+<a name="initializeWALEntryFilter-java.util.UUID-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeWALEntryFilter</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.285">initializeWALEntryFilter</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.283">initializeWALEntryFilter</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&nbsp;peerClusterId)</pre>
 </li>
 </ul>
 <a name="tryStartNewShipper-java.lang.String-java.util.concurrent.PriorityBlockingQueue-">
@@ -1003,7 +990,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>tryStartNewShipper</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.297">tryStartNewShipper</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;walGroupId,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.295">tryStartNewShipper</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;walGroupId,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/PriorityBlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">PriorityBlockingQueue</a>&lt;org.apache.hadoop.fs.Path&gt;&nbsp;queue)</pre>
 </li>
 </ul>
@@ -1013,7 +1000,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>createNewShipper</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.313">createNewShipper</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;walGroupId,
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.311">createNewShipper</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;walGroupId,
                                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/PriorityBlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">PriorityBlockingQueue</a>&lt;org.apache.hadoop.fs.Path&gt;&nbsp;queue)</pre>
 </li>
 </ul>
@@ -1023,7 +1010,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>createNewWALReader</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.318">createNewWALReader</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;walGroupId,
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.316">createNewWALReader</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;walGroupId,
                                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/PriorityBlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">PriorityBlockingQueue</a>&lt;org.apache.hadoop.fs.Path&gt;&nbsp;queue,
                                                       long&nbsp;startPosition)</pre>
 </li>
@@ -1034,7 +1021,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>uncaughtException</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.325">uncaughtException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a>&nbsp;t,
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.323">uncaughtException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a>&nbsp;t,
                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</pre>
 </li>
 </ul>
@@ -1044,7 +1031,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationEndpoint</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationEndpoint</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.332">getReplicationEndpoint</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationEndpoint</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.330">getReplicationEndpoint</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getReplicationEndpoint--">getReplicationEndpoint</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a></code></dd>
@@ -1059,7 +1046,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>getSourceManager</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.337">getSourceManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.335">getSourceManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getSourceManager--">getSourceManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a></code></dd>
@@ -1074,7 +1061,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>tryThrottle</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.342">tryThrottle</a>(int&nbsp;batchSize)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.340">tryThrottle</a>(int&nbsp;batchSize)
                  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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#tryThrottle-int-">ReplicationSourceInterface</a></code></span></div>
 <div class="block">Try to throttle when the peer config with a bandwidth</div>
@@ -1094,7 +1081,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>checkBandwidthChangeAndResetThrottler</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.357">checkBandwidthChangeAndResetThrottler</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.355">checkBandwidthChangeAndResetThrottler</a>()</pre>
 </li>
 </ul>
 <a name="getCurrentBandwidth--">
@@ -1103,7 +1090,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentBandwidth</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.367">getCurrentBandwidth</a>()</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.365">getCurrentBandwidth</a>()</pre>
 </li>
 </ul>
 <a name="sleepForRetries-java.lang.String-int-">
@@ -1112,7 +1099,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>sleepForRetries</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.379">sleepForRetries</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;msg,
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.377">sleepForRetries</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;msg,
                                   int&nbsp;sleepMultiplier)</pre>
 <div class="block">Do the sleeping logic</div>
 <dl>
@@ -1130,7 +1117,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>isPeerEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.397">isPeerEnabled</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.395">isPeerEnabled</a>()</pre>
 <div class="block">check whether the peer is enabled or not</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -1146,7 +1133,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>initialize</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.401">initialize</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.399">initialize</a>()</pre>
 </li>
 </ul>
 <a name="startup--">
@@ -1155,7 +1142,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>startup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.464">startup</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.465">startup</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#startup--">ReplicationSourceInterface</a></code></span></div>
 <div class="block">Start the replication</div>
 <dl>
@@ -1170,7 +1157,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>terminate</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.474">terminate</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;reason)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.475">terminate</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;reason)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#terminate-java.lang.String-">ReplicationSourceInterface</a></code></span></div>
 <div class="block">End the replication</div>
 <dl>
@@ -1187,7 +1174,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>terminate</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.479">terminate</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;reason,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.480">terminate</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;reason,
                       <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>&nbsp;cause)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#terminate-java.lang.String-java.lang.Exception-">ReplicationSourceInterface</a></code></span></div>
 <div class="block">End the replication</div>
@@ -1206,7 +1193,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>terminate</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.483">terminate</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;reason,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.484">terminate</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;reason,
                       <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>&nbsp;cause,
                       boolean&nbsp;join)</pre>
 </li>
@@ -1217,7 +1204,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>getQueueId</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/replication/regionserver/ReplicationSource.html#line.526">getQueueId</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/replication/regionserver/ReplicationSource.html#line.527">getQueueId</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getQueueId--">ReplicationSourceInterface</a></code></span></div>
 <div class="block">Get the queue id that the source is replicating to</div>
 <dl>
@@ -1234,7 +1221,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>getPeerId</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/replication/regionserver/ReplicationSource.html#line.531">getPeerId</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/replication/regionserver/ReplicationSource.html#line.532">getPeerId</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getPeerId--">ReplicationSourceInterface</a></code></span></div>
 <div class="block">Get the id that the source is replicating to.</div>
 <dl>
@@ -1251,7 +1238,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentPath</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.536">getCurrentPath</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.537">getCurrentPath</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getCurrentPath--">ReplicationSourceInterface</a></code></span></div>
 <div class="block">Get the current log that's replicated</div>
 <dl>
@@ -1268,7 +1255,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>isSourceActive</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.547">isSourceActive</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.548">isSourceActive</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#isSourceActive--">isSourceActive</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a></code></dd>
@@ -1283,7 +1270,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>getStats</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/replication/regionserver/ReplicationSource.html#line.574">getStats</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/replication/regionserver/ReplicationSource.html#line.575">getStats</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getStats--">ReplicationSourceInterface</a></code></span></div>
 <div class="block">Get a string representation of the current statistics
  for this source</div>
@@ -1301,7 +1288,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>getSourceMetrics</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSource</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.595">getSourceMetrics</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSource</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.596">getSourceMetrics</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getSourceMetrics--">getSourceMetrics</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a></code></dd>
@@ -1316,7 +1303,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>postShipEdits</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.600">postShipEdits</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;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.601">postShipEdits</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;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
                           int&nbsp;batchSize)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#postShipEdits-java.util.List-int-">ReplicationSourceInterface</a></code></span></div>
 <div class="block">Call this after the shipper thread ship some entries to peer cluster.</div>
@@ -1335,7 +1322,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALFileLengthProvider</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALFileLengthProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">WALFileLengthProvider</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.609">getWALFileLengthProvider</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALFileLengthProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">WALFileLengthProvider</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.610">getWALFileLengthProvider</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getWALFileLengthProvider--">getWALFileLengthProvider</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a></code></dd>
@@ -1350,7 +1337,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerWALsBelongTo</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.614">getServerWALsBelongTo</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.615">getServerWALsBelongTo</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getServerWALsBelongTo--">ReplicationSourceInterface</a></code></span></div>
 <div class="block">The queue of WALs only belong to one region server. This will return the server name which all
  WALs belong to.</div>
@@ -1368,7 +1355,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockList">
 <li class="blockList">
 <h4>getServer</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.618">getServer</a>()</pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.619">getServer</a>()</pre>
 </li>
 </ul>
 <a name="getQueueStorage--">
@@ -1377,7 +1364,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getQueueStorage</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.622">getQueueStorage</a>()</pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.623">getQueueStorage</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html
index 94aeab8..9415d46 100644
--- a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.153">RSGroupAdminEndpoint.RSGroupAdminServiceImpl</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.html#line.155">RSGroupAdminEndpoint.RSGroupAdminServiceImpl</a>
 extends org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdminService</pre>
 <div class="block">Implementation of RSGroupAdminService defined in RSGroupAdmin.proto.
  This class calls <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html" title="class in org.apache.hadoop.hbase.rsgroup"><code>RSGroupAdminServer</code></a> for actual work, converts result to protocol
@@ -281,7 +281,7 @@ extends org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RSGroupAdminServiceImpl</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.153">RSGroupAdminServiceImpl</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.155">RSGroupAdminServiceImpl</a>()</pre>
 </li>
 </ul>
 </li>
@@ -298,7 +298,7 @@ extends org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdm
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSGroupInfo</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.155">getRSGroupInfo</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.157">getRSGroupInfo</a>(com.google.protobuf.RpcController&nbsp;controller,
                            org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoRequest&nbsp;request,
                            com.google.protobuf.RpcCallback&lt;org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoResponse&gt;&nbsp;done)</pre>
 <dl>
@@ -313,7 +313,7 @@ extends org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdm
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSGroupInfoOfTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.174">getRSGroupInfoOfTable</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.176">getRSGroupInfoOfTable</a>(com.google.protobuf.RpcController&nbsp;controller,
                                   org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfTableRequest&nbsp;request,
                                   com.google.protobuf.RpcCallback&lt;org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfTableResponse&gt;&nbsp;done)</pre>
 <dl>
@@ -328,7 +328,7 @@ extends org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdm
 <ul class="blockList">
 <li class="blockList">
 <h4>moveServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.193">moveServers</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.195">moveServers</a>(com.google.protobuf.RpcController&nbsp;controller,
                         org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersRequest&nbsp;request,
                         com.google.protobuf.RpcCallback&lt;org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersResponse&gt;&nbsp;done)</pre>
 <dl>
@@ -343,7 +343,7 @@ extends org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdm
 <ul class="blockList">
 <li class="blockList">
 <h4>moveTables</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.212">moveTables</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.220">moveTables</a>(com.google.protobuf.RpcController&nbsp;controller,
                        org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveTablesRequest&nbsp;request,
                        com.google.protobuf.RpcCallback&lt;org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveTablesResponse&gt;&nbsp;done)</pre>
 <dl>
@@ -358,7 +358,7 @@ extends org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdm
 <ul class="blockList">
 <li class="blockList">
 <h4>addRSGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.231">addRSGroup</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.245">addRSGroup</a>(com.google.protobuf.RpcController&nbsp;controller,
                        org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.AddRSGroupRequest&nbsp;request,
                        com.google.protobuf.RpcCallback&lt;org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.AddRSGroupResponse&gt;&nbsp;done)</pre>
 <dl>
@@ -373,7 +373,7 @@ extends org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdm
 <ul class="blockList">
 <li class="blockList">
 <h4>removeRSGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.245">removeRSGroup</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.265">removeRSGroup</a>(com.google.protobuf.RpcController&nbsp;controller,
                           org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveRSGroupRequest&nbsp;request,
                           com.google.protobuf.RpcCallback&lt;org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveRSGroupResponse&gt;&nbsp;done)</pre>
 <dl>
@@ -388,7 +388,7 @@ extends org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdm
 <ul class="blockList">
 <li class="blockList">
 <h4>balanceRSGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.260">balanceRSGroup</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.286">balanceRSGroup</a>(com.google.protobuf.RpcController&nbsp;controller,
                            org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.BalanceRSGroupRequest&nbsp;request,
                            com.google.protobuf.RpcCallback&lt;org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.BalanceRSGroupResponse&gt;&nbsp;done)</pre>
 <dl>
@@ -403,7 +403,7 @@ extends org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdm
 <ul class="blockList">
 <li class="blockList">
 <h4>listRSGroupInfos</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.276">listRSGroupInfos</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.310">listRSGroupInfos</a>(com.google.protobuf.RpcController&nbsp;controller,
                              org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.ListRSGroupInfosRequest&nbsp;request,
                              com.google.protobuf.RpcCallback&lt;org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.ListRSGroupInfosResponse&gt;&nbsp;done)</pre>
 <dl>
@@ -418,7 +418,7 @@ extends org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdm
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSGroupInfoOfServer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.292">getRSGroupInfoOfServer</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.326">getRSGroupInfoOfServer</a>(com.google.protobuf.RpcController&nbsp;controller,
                                    org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfServerRequest&nbsp;request,
                                    com.google.protobuf.RpcCallback&lt;org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfServerResponse&gt;&nbsp;done)</pre>
 <dl>
@@ -433,7 +433,7 @@ extends org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdm
 <ul class="blockList">
 <li class="blockList">
 <h4>moveServersAndTables</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.312">moveServersAndTables</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.346">moveServersAndTables</a>(com.google.protobuf.RpcController&nbsp;controller,
                                  org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersAndTablesRequest&nbsp;request,
                                  com.google.protobuf.RpcCallback&lt;org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersAndTablesResponse&gt;&nbsp;done)</pre>
 <dl>
@@ -448,7 +448,7 @@ extends org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>removeServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.335">removeServers</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html#line.377">removeServers</a>(com.google.protobuf.RpcController&nbsp;controller,
                           org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveServersRequest&nbsp;request,
                           com.google.protobuf.RpcCallback&lt;org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveServersResponse&gt;&nbsp;done)</pre>
 <dl>


[05/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index b1d1d42..6c82745 100644
--- a/license.html
+++ b/license.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180523" />
+    <meta name="Date-Revision-yyyymmdd" content="20180524" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -276,209 +276,7 @@
 <h2><a name="Project_Licenses"></a>Project Licenses</h2><a name="Project_Licenses"></a>
 <div class="section">
 <h3><a name="Apache_License_Version_2.0"></a>Apache License, Version 2.0</h3><a name="Apache_License_Version_2.0"></a>
-<div class="source"><pre class="prettyprint">
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      &quot;License&quot; shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      &quot;Licensor&quot; shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      &quot;Legal Entity&quot; shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      &quot;control&quot; means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      &quot;You&quot; (or &quot;Your&quot;) shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      &quot;Source&quot; form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      &quot;Object&quot; form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      &quot;Work&quot; shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      &quot;Derivative Works&quot; shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      &quot;Contribution&quot; shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, &quot;submitted&quot;
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as &quot;Not a Contribution.&quot;
-
-      &quot;Contributor&quot; shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a &quot;NOTICE&quot; text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an &quot;AS IS&quot; BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets &quot;[]&quot;
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same &quot;printed page&quot; as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-</pre></div></div></div>
+<p>Can't read the url [https://www.apache.org/licenses/LICENSE-2.0.txt] : connect timed out</p></div></div>
                   </div>
           </div>
 
@@ -491,7 +289,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-05-23</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-05-24</li>
             </p>
                 </div>
 

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

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index 28c58d5..9e1e17b 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180523" />
+    <meta name="Date-Revision-yyyymmdd" content="20180524" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -440,7 +440,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-05-23</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-05-24</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 8a7060d..79cca90 100644
--- a/plugins.html
+++ b/plugins.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180523" />
+    <meta name="Date-Revision-yyyymmdd" content="20180524" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -375,7 +375,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-05-23</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-05-24</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 5e21428..afb4627 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180523" />
+    <meta name="Date-Revision-yyyymmdd" content="20180524" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Powered By Apache HBase™</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -769,7 +769,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-05-23</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-05-24</li>
             </p>
                 </div>
 

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

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

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

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

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index f614e88..95bf395 100644
--- a/source-repository.html
+++ b/source-repository.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180523" />
+    <meta name="Date-Revision-yyyymmdd" content="20180524" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -299,7 +299,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-05-23</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-05-24</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 47585b2..03f9438 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180523" />
+    <meta name="Date-Revision-yyyymmdd" content="20180524" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -333,7 +333,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-05-23</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-05-24</li>
             </p>
                 </div>
 

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index deeaabe..2b559b9 100644
--- a/team-list.html
+++ b/team-list.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180523" />
+    <meta name="Date-Revision-yyyymmdd" content="20180524" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -730,7 +730,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-05-23</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-05-24</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index 4b331c0..935aeda 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -1410,6 +1410,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/TestMemStoreLAB.AllocRecord.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestMemStoreLAB.AllocRecord</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestMemstoreLABWithoutPool.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestMemstoreLABWithoutPool</a></li>
 <li><a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestMergeTableRegionsProcedure</a></li>
+<li><a href="org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">TestMetaAssignmentWithStopMaster</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestMetaCache.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestMetaCache</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestMetaCache.CallQueueTooBigExceptionInjector.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestMetaCache.CallQueueTooBigExceptionInjector</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestMetaCache.ExceptionInjector.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestMetaCache.ExceptionInjector</a></li>
@@ -1659,6 +1660,8 @@
 <li><a href="org/apache/hadoop/hbase/quotas/TestQuotaStatusRPCs.html" title="class in org.apache.hadoop.hbase.quotas" target="classFrame">TestQuotaStatusRPCs</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/TestQuotaTableUtil.html" title="class in org.apache.hadoop.hbase.quotas" target="classFrame">TestQuotaTableUtil</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/TestQuotaThrottle.html" title="class in org.apache.hadoop.hbase.quotas" target="classFrame">TestQuotaThrottle</a></li>
+<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestRaceWhenCreatingReplicationSource</a></li>
+<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/TestRandomRowFilter.html" title="class in org.apache.hadoop.hbase.filter" target="classFrame">TestRandomRowFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/TestRateLimiter.html" title="class in org.apache.hadoop.hbase.quotas" target="classFrame">TestRateLimiter</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestRawAsyncScanCursor</a></li>
@@ -1897,6 +1900,7 @@
 <li><a href="org/apache/hadoop/hbase/ipc/TestRpcServerSlowConnectionSetup.html" title="class in org.apache.hadoop.hbase.ipc" target="classFrame">TestRpcServerSlowConnectionSetup</a></li>
 <li><a href="org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer" target="classFrame">TestRSGroupBasedLoadBalancer</a></li>
 <li><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.html" title="class in org.apache.hadoop.hbase.rsgroup" target="classFrame">TestRSGroups</a></li>
+<li><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup" target="classFrame">TestRSGroups.CPMasterObserver</a></li>
 <li><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html" title="class in org.apache.hadoop.hbase.rsgroup" target="classFrame">TestRSGroupsBase</a></li>
 <li><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsOfflineMode.html" title="class in org.apache.hadoop.hbase.rsgroup" target="classFrame">TestRSGroupsOfflineMode</a></li>
 <li><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsWithACL.html" title="class in org.apache.hadoop.hbase.rsgroup" target="classFrame">TestRSGroupsWithACL</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index c413f84..5d07158 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -1410,6 +1410,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/TestMemStoreLAB.AllocRecord.html" title="class in org.apache.hadoop.hbase.regionserver">TestMemStoreLAB.AllocRecord</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestMemstoreLABWithoutPool.html" title="class in org.apache.hadoop.hbase.regionserver">TestMemstoreLABWithoutPool</a></li>
 <li><a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMergeTableRegionsProcedure</a></li>
+<li><a href="org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html" title="class in org.apache.hadoop.hbase.master">TestMetaAssignmentWithStopMaster</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestMetaCache.html" title="class in org.apache.hadoop.hbase.client">TestMetaCache</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestMetaCache.CallQueueTooBigExceptionInjector.html" title="class in org.apache.hadoop.hbase.client">TestMetaCache.CallQueueTooBigExceptionInjector</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestMetaCache.ExceptionInjector.html" title="class in org.apache.hadoop.hbase.client">TestMetaCache.ExceptionInjector</a></li>
@@ -1659,6 +1660,8 @@
 <li><a href="org/apache/hadoop/hbase/quotas/TestQuotaStatusRPCs.html" title="class in org.apache.hadoop.hbase.quotas">TestQuotaStatusRPCs</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/TestQuotaTableUtil.html" title="class in org.apache.hadoop.hbase.quotas">TestQuotaTableUtil</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/TestQuotaThrottle.html" title="class in org.apache.hadoop.hbase.quotas">TestQuotaThrottle</a></li>
+<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource</a></li>
+<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/TestRandomRowFilter.html" title="class in org.apache.hadoop.hbase.filter">TestRandomRowFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/TestRateLimiter.html" title="class in org.apache.hadoop.hbase.quotas">TestRateLimiter</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncScanCursor</a></li>
@@ -1897,6 +1900,7 @@
 <li><a href="org/apache/hadoop/hbase/ipc/TestRpcServerSlowConnectionSetup.html" title="class in org.apache.hadoop.hbase.ipc">TestRpcServerSlowConnectionSetup</a></li>
 <li><a href="org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">TestRSGroupBasedLoadBalancer</a></li>
 <li><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups</a></li>
+<li><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></li>
 <li><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroupsBase</a></li>
 <li><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsOfflineMode.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroupsOfflineMode</a></li>
 <li><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsWithACL.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroupsWithACL</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/constant-values.html b/testdevapidocs/constant-values.html
index ede6116..47425b3 100644
--- a/testdevapidocs/constant-values.html
+++ b/testdevapidocs/constant-values.html
@@ -7014,6 +7014,25 @@
 </li>
 <li class="blockList">
 <table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
+<caption><span>org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html" title="class in org.apache.hadoop.hbase.master">TestMetaAssignmentWithStopMaster</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th scope="col">Constant Field</th>
+<th class="colLast" scope="col">Value</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.master.TestMetaAssignmentWithStopMaster.WAIT_TIMEOUT">
+<!--   -->
+</a><code>private&nbsp;static&nbsp;final&nbsp;long</code></td>
+<td><code><a href="org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html#WAIT_TIMEOUT">WAIT_TIMEOUT</a></code></td>
+<td class="colLast"><code>120000L</code></td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
 <caption><span>org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestRegionPlacement.html" title="class in org.apache.hadoop.hbase.master">TestRegionPlacement</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>


[50/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/apidocs/org/apache/hadoop/hbase/util/ByteBufferUtils.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/util/ByteBufferUtils.html b/apidocs/org/apache/hadoop/hbase/util/ByteBufferUtils.html
index d51735b..5770097 100644
--- a/apidocs/org/apache/hadoop/hbase/util/ByteBufferUtils.html
+++ b/apidocs/org/apache/hadoop/hbase/util/ByteBufferUtils.html
@@ -141,6 +141,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferUtils.html#NEXT_BIT_SHIFT">NEXT_BIT_SHIFT</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferUtils.html#UNSAFE_UNALIGNED">UNSAFE_UNALIGNED</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferUtils.html#VALUE_MASK">VALUE_MASK</a></span></code>&nbsp;</td>
 </tr>
@@ -624,7 +628,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="NEXT_BIT_MASK">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>NEXT_BIT_MASK</h4>
 <pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.50">NEXT_BIT_MASK</a></pre>
@@ -634,6 +638,15 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="UNSAFE_UNALIGNED">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>UNSAFE_UNALIGNED</h4>
+<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.53">UNSAFE_UNALIGNED</a></pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ============ METHOD DETAIL ========== -->
@@ -648,7 +661,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>writeVLong</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.63">writeVLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.62">writeVLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
                               long&nbsp;i)</pre>
 <div class="block">Similar to <code>WritableUtils.writeVLong(java.io.DataOutput, long)</code>,
  but writes to a <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio"><code>ByteBuffer</code></a>.</div>
@@ -660,7 +673,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readVLong</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.96">readVLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in)</pre>
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.95">readVLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in)</pre>
 <div class="block">Similar to <code>WritableUtils.readVLong(DataInput)</code> but reads from a
  <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio"><code>ByteBuffer</code></a>.</div>
 </li>
@@ -671,7 +684,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putCompressedInt</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.121">putCompressedInt</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;out,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.120">putCompressedInt</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;out,
                                    int&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>
 <div class="block">Put in buffer integer using 7 bit encoding. For each written byte:
@@ -694,7 +707,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putInt</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.143">putInt</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;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.142">putInt</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;out,
                           int&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>
 <div class="block">Put in output stream 32 bit integer (Big Endian byte order).</div>
@@ -713,7 +726,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toByte</h4>
-<pre>public static&nbsp;byte&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.155">toByte</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;byte&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.154">toByte</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                           int&nbsp;offset)</pre>
 </li>
 </ul>
@@ -723,7 +736,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>moveBufferToStream</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.169">moveBufferToStream</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;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.168">moveBufferToStream</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;out,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
                                       int&nbsp;length)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -744,7 +757,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyBufferToStream</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.184">copyBufferToStream</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;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.183">copyBufferToStream</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;out,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
                                       int&nbsp;offset,
                                       int&nbsp;length)
@@ -769,7 +782,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyBufferToStream</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.206">copyBufferToStream</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</a>&nbsp;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.205">copyBufferToStream</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</a>&nbsp;out,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
                                       int&nbsp;offset,
                                       int&nbsp;length)
@@ -794,7 +807,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putLong</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.219">putLong</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;out,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.218">putLong</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;out,
                           long&nbsp;value,
                           int&nbsp;fitInBytes)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -810,7 +823,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putByte</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.229">putByte</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.228">putByte</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                           int&nbsp;offset,
                           byte&nbsp;b)</pre>
 </li>
@@ -821,7 +834,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>longFitsIn</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.243">longFitsIn</a>(long&nbsp;value)</pre>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.242">longFitsIn</a>(long&nbsp;value)</pre>
 <div class="block">Check how many bytes are required to store value.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -837,7 +850,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>intFitsIn</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.279">intFitsIn</a>(int&nbsp;value)</pre>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.278">intFitsIn</a>(int&nbsp;value)</pre>
 <div class="block">Check how many bytes is required to store value.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -853,7 +866,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readCompressedInt</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.301">readCompressedInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;input)
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.300">readCompressedInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;input)
                              throws <a href="https://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">Read integer from stream coded in 7 bits and increment position.</div>
 <dl>
@@ -870,7 +883,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readCompressedInt</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.322">readCompressedInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer)</pre>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.321">readCompressedInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer)</pre>
 <div class="block">Read integer from buffer coded in 7 bits and increment position.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -884,7 +897,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readLong</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.336">readLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;in,
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.335">readLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;in,
                             int&nbsp;fitInBytes)
                      throws <a href="https://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">Read long which was written to fitInBytes bytes and increment position.</div>
@@ -904,7 +917,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readLong</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.350">readLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.349">readLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
                             int&nbsp;fitInBytes)</pre>
 <div class="block">Read long which was written to fitInBytes bytes and increment position.</div>
 <dl>
@@ -921,7 +934,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyFromStreamToBuffer</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.365">copyFromStreamToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.364">copyFromStreamToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInputStream.html?is-external=true" title="class or interface in java.io">DataInputStream</a>&nbsp;in,
                                           int&nbsp;length)
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -943,7 +956,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>drainInputStreamToBuffer</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.381">drainInputStreamToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;is)
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.380">drainInputStreamToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;is)
                                            throws <a href="https://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">Copy from the InputStream to a new heap ByteBuffer until the InputStream is exhausted.</div>
 <dl>
@@ -958,7 +971,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyFromBufferToBuffer</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.396">copyFromBufferToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.395">copyFromBufferToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out)</pre>
 <div class="block">Copy one buffer's whole data to another. Write starts at the current position of 'out' buffer.
  Note : This will advance the position marker of <code>out</code> and also change the position maker
@@ -976,7 +989,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyFromBufferToBuffer</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.421">copyFromBufferToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.420">copyFromBufferToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
                                           int&nbsp;sourceOffset,
                                           int&nbsp;destinationOffset,
@@ -999,7 +1012,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyFromBufferToBuffer</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.448">copyFromBufferToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.447">copyFromBufferToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
                                           int&nbsp;sourceOffset,
                                           int&nbsp;length)</pre>
@@ -1022,7 +1035,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>findCommonPrefix</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.472">findCommonPrefix</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.471">findCommonPrefix</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                                    int&nbsp;offsetLeft,
                                    int&nbsp;offsetRight,
                                    int&nbsp;limit)</pre>
@@ -1044,7 +1057,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>findCommonPrefix</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.494">findCommonPrefix</a>(byte[]&nbsp;left,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.493">findCommonPrefix</a>(byte[]&nbsp;left,
                                    int&nbsp;leftOffset,
                                    int&nbsp;leftLength,
                                    byte[]&nbsp;right,
@@ -1068,7 +1081,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>findCommonPrefix</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.517">findCommonPrefix</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;left,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.516">findCommonPrefix</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;left,
                                    int&nbsp;leftOffset,
                                    int&nbsp;leftLength,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;right,
@@ -1092,7 +1105,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>arePartsEqual</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.539">arePartsEqual</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.538">arePartsEqual</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                                     int&nbsp;offsetLeft,
                                     int&nbsp;lengthLeft,
                                     int&nbsp;offsetRight,
@@ -1116,7 +1129,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>skip</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.565">skip</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.564">skip</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                         int&nbsp;length)</pre>
 <div class="block">Increment position in buffer.</div>
 <dl>
@@ -1132,7 +1145,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>extendLimit</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.569">extendLimit</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.568">extendLimit</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                                int&nbsp;numBytes)</pre>
 </li>
 </ul>
@@ -1142,7 +1155,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toBytes</h4>
-<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.580">toBytes</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.579">toBytes</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                              int&nbsp;startPosition)</pre>
 <div class="block">Copy the bytes from position to limit into a new byte[] of the exact length and sets the
  position and limit back to their original values (though not thread safe).</div>
@@ -1161,7 +1174,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toBytes</h4>
-<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.596">toBytes</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.595">toBytes</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                              int&nbsp;offset,
                              int&nbsp;length)</pre>
 <div class="block">Copy the given number of bytes from specified offset into a new byte[]</div>
@@ -1181,7 +1194,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.604">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf1,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.603">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf1,
                              int&nbsp;o1,
                              int&nbsp;l1,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf2,
@@ -1195,7 +1208,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.624">hashCode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.623">hashCode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
                            int&nbsp;offset,
                            int&nbsp;length)</pre>
 <dl>
@@ -1212,7 +1225,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.632">compareTo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf1,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.631">compareTo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf1,
                             int&nbsp;o1,
                             int&nbsp;l1,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf2,
@@ -1226,7 +1239,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.662">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf1,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.663">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf1,
                              int&nbsp;o1,
                              int&nbsp;l1,
                              byte[]&nbsp;buf2,
@@ -1240,7 +1253,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.674">compareTo</a>(byte[]&nbsp;buf1,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.680">compareTo</a>(byte[]&nbsp;buf1,
                             int&nbsp;o1,
                             int&nbsp;l1,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf2,
@@ -1254,7 +1267,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.701">compareTo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf1,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.705">compareTo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf1,
                             int&nbsp;o1,
                             int&nbsp;l1,
                             byte[]&nbsp;buf2,
@@ -1268,7 +1281,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toShort</h4>
-<pre>public static&nbsp;short&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.775">toShort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;short&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.779">toShort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                             int&nbsp;offset)</pre>
 <div class="block">Reads a short value at the given buffer's offset.</div>
 <dl>
@@ -1286,7 +1299,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toInt</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.786">toInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer)</pre>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.790">toInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer)</pre>
 <div class="block">Reads an int value at the given buffer's current position. Also advances the buffer's position</div>
 </li>
 </ul>
@@ -1296,7 +1309,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toInt</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.802">toInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.806">toInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                         int&nbsp;offset)</pre>
 <div class="block">Reads an int value at the given buffer's offset.</div>
 <dl>
@@ -1314,7 +1327,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readAsInt</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.820">readAsInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.824">readAsInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
                             int&nbsp;offset,
                             int&nbsp;length)</pre>
 <div class="block">Converts a ByteBuffer to an int value</div>
@@ -1336,7 +1349,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toLong</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.839">toLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.843">toLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                           int&nbsp;offset)</pre>
 <div class="block">Reads a long value at the given buffer's offset.</div>
 <dl>
@@ -1354,7 +1367,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putInt</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.853">putInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.857">putInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                           int&nbsp;val)</pre>
 <div class="block">Put an int value out to the given ByteBuffer's current position in big-endian format.
  This also advances the position in buffer by int size.</div>
@@ -1371,7 +1384,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putInt</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.862">putInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.866">putInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                          int&nbsp;index,
                          int&nbsp;val)</pre>
 </li>
@@ -1382,7 +1395,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toDouble</h4>
-<pre>public static&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.876">toDouble</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.880">toDouble</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                               int&nbsp;offset)</pre>
 <div class="block">Reads a double value at the given buffer's offset.</div>
 <dl>
@@ -1400,7 +1413,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toBigDecimal</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html?is-external=true" title="class or interface in java.math">BigDecimal</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.886">toBigDecimal</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html?is-external=true" title="class or interface in java.math">BigDecimal</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.890">toBigDecimal</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                                       int&nbsp;offset,
                                       int&nbsp;length)</pre>
 <div class="block">Reads a BigDecimal value at the given buffer's offset.</div>
@@ -1419,7 +1432,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putShort</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.904">putShort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.908">putShort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                             short&nbsp;val)</pre>
 <div class="block">Put a short value out to the given ByteBuffer's current position in big-endian format.
  This also advances the position in buffer by short size.</div>
@@ -1436,7 +1449,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putShort</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.913">putShort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.917">putShort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                            int&nbsp;index,
                            short&nbsp;val)</pre>
 </li>
@@ -1447,7 +1460,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putAsShort</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.921">putAsShort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.925">putAsShort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
                              int&nbsp;index,
                              int&nbsp;val)</pre>
 </li>
@@ -1458,7 +1471,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putLong</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.934">putLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.938">putLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                            long&nbsp;val)</pre>
 <div class="block">Put a long value out to the given ByteBuffer's current position in big-endian format.
  This also advances the position in buffer by long size.</div>
@@ -1475,7 +1488,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putLong</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.943">putLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.947">putLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                           int&nbsp;index,
                           long&nbsp;val)</pre>
 </li>
@@ -1486,7 +1499,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyFromArrayToBuffer</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.959">copyFromArrayToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.963">copyFromArrayToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
                                          byte[]&nbsp;in,
                                          int&nbsp;inOffset,
                                          int&nbsp;length)</pre>
@@ -1507,7 +1520,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyFromArrayToBuffer</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.981">copyFromArrayToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.985">copyFromArrayToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
                                          int&nbsp;outOffset,
                                          byte[]&nbsp;in,
                                          int&nbsp;inOffset,
@@ -1529,7 +1542,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyFromBufferToArray</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.1003">copyFromBufferToArray</a>(byte[]&nbsp;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.1007">copyFromBufferToArray</a>(byte[]&nbsp;out,
                                          <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
                                          int&nbsp;sourceOffset,
                                          int&nbsp;destinationOffset,
@@ -1552,7 +1565,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyOfRange</h4>
-<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.1023">copyOfRange</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;original,
+<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.1027">copyOfRange</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;original,
                                  int&nbsp;from,
                                  int&nbsp;to)</pre>
 <div class="block">Similar to  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html?is-external=true#copyOfRange-byte:A-int-int-" title="class or interface in java.util"><code>Arrays.copyOfRange(byte[], int, int)</code></a></div>
@@ -1572,7 +1585,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toStringBinary</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/util/ByteBufferUtils.html#line.1032">toStringBinary</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;b,
+<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/util/ByteBufferUtils.html#line.1036">toStringBinary</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;b,
                                     int&nbsp;off,
                                     int&nbsp;len)</pre>
 </li>
@@ -1583,7 +1596,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toStringBinary</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/util/ByteBufferUtils.html#line.1051">toStringBinary</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;b)</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/util/ByteBufferUtils.html#line.1055">toStringBinary</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;b)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/apidocs/src-html/org/apache/hadoop/hbase/CellComparator.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/CellComparator.html b/apidocs/src-html/org/apache/hadoop/hbase/CellComparator.html
index 31cd218..5541ab5 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/CellComparator.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/CellComparator.html
@@ -29,116 +29,124 @@
 <span class="sourceLineNo">021</span><a name="line.21"></a>
 <span class="sourceLineNo">022</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>/**<a name="line.24"></a>
-<span class="sourceLineNo">025</span> * Comparator for comparing cells and has some specialized methods that allows comparing individual<a name="line.25"></a>
-<span class="sourceLineNo">026</span> * cell components like row, family, qualifier and timestamp<a name="line.26"></a>
-<span class="sourceLineNo">027</span> */<a name="line.27"></a>
-<span class="sourceLineNo">028</span>@InterfaceAudience.Public<a name="line.28"></a>
-<span class="sourceLineNo">029</span>@InterfaceStability.Evolving<a name="line.29"></a>
-<span class="sourceLineNo">030</span>public interface CellComparator extends Comparator&lt;Cell&gt; {<a name="line.30"></a>
-<span class="sourceLineNo">031</span>  /**<a name="line.31"></a>
-<span class="sourceLineNo">032</span>   * A comparator for ordering cells in user-space tables. Useful when writing cells in sorted<a name="line.32"></a>
-<span class="sourceLineNo">033</span>   * order as necessary for bulk import (i.e. via MapReduce)<a name="line.33"></a>
-<span class="sourceLineNo">034</span>   * &lt;p&gt;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>   * CAUTION: This comparator may provide inaccurate ordering for cells from system tables,<a name="line.35"></a>
-<span class="sourceLineNo">036</span>   * and should not be relied upon in that case.<a name="line.36"></a>
-<span class="sourceLineNo">037</span>   */<a name="line.37"></a>
-<span class="sourceLineNo">038</span>  static CellComparator getInstance() {<a name="line.38"></a>
-<span class="sourceLineNo">039</span>    return CellComparatorImpl.COMPARATOR;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  }<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>  /**<a name="line.42"></a>
-<span class="sourceLineNo">043</span>   * Lexographically compares two cells. The key part of the cell is taken for comparison which<a name="line.43"></a>
-<span class="sourceLineNo">044</span>   * includes row, family, qualifier, timestamp and type<a name="line.44"></a>
-<span class="sourceLineNo">045</span>   * @param leftCell the left hand side cell<a name="line.45"></a>
-<span class="sourceLineNo">046</span>   * @param rightCell the right hand side cell<a name="line.46"></a>
-<span class="sourceLineNo">047</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.47"></a>
-<span class="sourceLineNo">048</span>   *         cells are equal<a name="line.48"></a>
-<span class="sourceLineNo">049</span>   */<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  @Override<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  int compare(Cell leftCell, Cell rightCell);<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  /**<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * Compare cells.<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   * @param ignoreSequenceid True if we are to compare the key portion only and ignore<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   * the sequenceid. Set to false to compare key and consider sequenceid.<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * @return 0 if equal, -1 if a &amp;lt; b, and +1 if a &amp;gt; b.<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  int compare(Cell leftCell, Cell rightCell, boolean ignoreSequenceid);<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  /**<a name="line.61"></a>
-<span class="sourceLineNo">062</span>   * Lexographically compares the rows of two cells.<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * @param leftCell the left hand side cell<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * @param rightCell the right hand side cell<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   *         cells are equal<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   */<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  int compareRows(Cell leftCell, Cell rightCell);<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>   * Compares the row part of the cell with a simple plain byte[] like the<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   * stopRow in Scan.<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * @param cell the cell<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * @param bytes the byte[] representing the row to be compared with<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * @param offset the offset of the byte[]<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * @param length the length of the byte[]<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   *         cells are equal<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  int compareRows(Cell cell, byte[] bytes, int offset, int length);<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>   * Lexographically compares the two cells excluding the row part. It compares family, qualifier,<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * timestamp and the type<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * @param leftCell the left hand side cell<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * @param rightCell the right hand side cell<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   *         cells are equal<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   */<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  int compareWithoutRow(Cell leftCell, Cell rightCell);<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>   * Lexographically compares the families of the two cells<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param leftCell the left hand side cell<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * @param rightCell the right hand side cell<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   *         cells are equal<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   */<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  int compareFamilies(Cell leftCell, Cell rightCell);<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>   * Lexographically compares the qualifiers of the two cells<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * @param leftCell the left hand side cell<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * @param rightCell the right hand side cell<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   *         cells are equal<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   */<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  int compareQualifiers(Cell leftCell, Cell rightCell);<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>   * Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * when we iterate over a memstore and newer versions are the first we trip over when reading from<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * a store file.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * @param leftCell the left hand side cell<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param rightCell the right hand side cell<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * @return 1 if left's timestamp &amp;lt; right's timestamp -1 if left's timestamp &amp;gt; right's<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   *         timestamp 0 if both timestamps are equal<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  int compareTimestamps(Cell leftCell, Cell rightCell);<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  /**<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * when we iterate over a memstore and newer versions are the first we trip over when reading from<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * a store file.<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @param leftCellts the left cell's timestamp<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * @param rightCellts the right cell's timestamp<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   * @return 1 if left's timestamp &amp;lt; right's timestamp -1 if left's timestamp &amp;gt; right's<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   *         timestamp 0 if both timestamps are equal<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   */<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  int compareTimestamps(long leftCellts, long rightCellts);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>}<a name="line.133"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>/**<a name="line.25"></a>
+<span class="sourceLineNo">026</span> * Comparator for comparing cells and has some specialized methods that allows comparing individual<a name="line.26"></a>
+<span class="sourceLineNo">027</span> * cell components like row, family, qualifier and timestamp<a name="line.27"></a>
+<span class="sourceLineNo">028</span> */<a name="line.28"></a>
+<span class="sourceLineNo">029</span>@InterfaceAudience.Public<a name="line.29"></a>
+<span class="sourceLineNo">030</span>@InterfaceStability.Evolving<a name="line.30"></a>
+<span class="sourceLineNo">031</span>public interface CellComparator extends Comparator&lt;Cell&gt; {<a name="line.31"></a>
+<span class="sourceLineNo">032</span>  /**<a name="line.32"></a>
+<span class="sourceLineNo">033</span>   * A comparator for ordering cells in user-space tables. Useful when writing cells in sorted<a name="line.33"></a>
+<span class="sourceLineNo">034</span>   * order as necessary for bulk import (i.e. via MapReduce)<a name="line.34"></a>
+<span class="sourceLineNo">035</span>   * &lt;p&gt;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>   * CAUTION: This comparator may provide inaccurate ordering for cells from system tables,<a name="line.36"></a>
+<span class="sourceLineNo">037</span>   * and should not be relied upon in that case.<a name="line.37"></a>
+<span class="sourceLineNo">038</span>   */<a name="line.38"></a>
+<span class="sourceLineNo">039</span>  static CellComparator getInstance() {<a name="line.39"></a>
+<span class="sourceLineNo">040</span>    return CellComparatorImpl.COMPARATOR;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  }<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>  /**<a name="line.43"></a>
+<span class="sourceLineNo">044</span>   * Lexographically compares two cells. The key part of the cell is taken for comparison which<a name="line.44"></a>
+<span class="sourceLineNo">045</span>   * includes row, family, qualifier, timestamp and type<a name="line.45"></a>
+<span class="sourceLineNo">046</span>   * @param leftCell the left hand side cell<a name="line.46"></a>
+<span class="sourceLineNo">047</span>   * @param rightCell the right hand side cell<a name="line.47"></a>
+<span class="sourceLineNo">048</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   *         cells are equal<a name="line.49"></a>
+<span class="sourceLineNo">050</span>   */<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  @Override<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  int compare(Cell leftCell, Cell rightCell);<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  /**<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * Compare cells.<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   * @param ignoreSequenceid True if we are to compare the key portion only and ignore<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   * the sequenceid. Set to false to compare key and consider sequenceid.<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * @return 0 if equal, -1 if a &amp;lt; b, and +1 if a &amp;gt; b.<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   */<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  int compare(Cell leftCell, Cell rightCell, boolean ignoreSequenceid);<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  /**<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   * Lexographically compares the rows of two cells.<a name="line.63"></a>
+<span class="sourceLineNo">064</span>   * @param leftCell the left hand side cell<a name="line.64"></a>
+<span class="sourceLineNo">065</span>   * @param rightCell the right hand side cell<a name="line.65"></a>
+<span class="sourceLineNo">066</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   *         cells are equal<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  int compareRows(Cell leftCell, Cell rightCell);<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>   * Compares the row part of the cell with a simple plain byte[] like the<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * stopRow in Scan.<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * @param cell the cell<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * @param bytes the byte[] representing the row to be compared with<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * @param offset the offset of the byte[]<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * @param length the length of the byte[]<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   *         cells are equal<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   */<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  int compareRows(Cell cell, byte[] bytes, int offset, int length);<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  /**<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * Lexographically compares the two cells excluding the row part. It compares family, qualifier,<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * timestamp and the type<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * @param leftCell the left hand side cell<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * @param rightCell the right hand side cell<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   *         cells are equal<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  int compareWithoutRow(Cell leftCell, Cell rightCell);<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  /**<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * Lexographically compares the families of the two cells<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param leftCell the left hand side cell<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param rightCell the right hand side cell<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   *         cells are equal<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  int compareFamilies(Cell leftCell, Cell rightCell);<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>   * Lexographically compares the qualifiers of the two cells<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   * @param leftCell the left hand side cell<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * @param rightCell the right hand side cell<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   *         cells are equal<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   */<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  int compareQualifiers(Cell leftCell, Cell rightCell);<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>   * Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * when we iterate over a memstore and newer versions are the first we trip over when reading from<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * a store file.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * @param leftCell the left hand side cell<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param rightCell the right hand side cell<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @return 1 if left's timestamp &amp;lt; right's timestamp -1 if left's timestamp &amp;gt; right's<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   *         timestamp 0 if both timestamps are equal<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  int compareTimestamps(Cell leftCell, Cell rightCell);<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  /**<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * when we iterate over a memstore and newer versions are the first we trip over when reading from<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * a store file.<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param leftCellts the left cell's timestamp<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * @param rightCellts the right cell's timestamp<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   * @return 1 if left's timestamp &amp;lt; right's timestamp -1 if left's timestamp &amp;gt; right's<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   *         timestamp 0 if both timestamps are equal<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   */<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  int compareTimestamps(long leftCellts, long rightCellts);<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>   * @return A dumbed-down, fast comparator for hbase2 base-type, the {@link ByteBufferKeyValue}.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   *   Create an instance when you make a new memstore, when you know only BBKVs will be passed.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   *   Do not pollute with types other than BBKV if can be helped; the Comparator will slow.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   */<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  Comparator getSimpleComparator();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>}<a name="line.141"></a>
 
 
 


[24/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
index 9644187..b979909 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
@@ -1199,2602 +1199,2599 @@
 <span class="sourceLineNo">1191</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1191"></a>
 <span class="sourceLineNo">1192</span>    try {<a name="line.1192"></a>
 <span class="sourceLineNo">1193</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>      ServerName sn = ServerName.parseVersionedServerName(this.serverName.getVersionedBytes());<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      request.setServer(ProtobufUtil.toServerName(sn));<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>      request.setLoad(sl);<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>      rss.regionServerReport(null, request.build());<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>    } catch (ServiceException se) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>        // This will be caught and handled as a fatal error in run()<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>        throw ioe;<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>      }<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>      if (rssStub == rss) {<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>        rssStub = null;<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      }<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>      // Method blocks until new master is found or we are stopped<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      createRegionServerStatusStub(true);<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>    }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>  }<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span><a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>  /**<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>   *<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>   * @param regionSizeStore The store containing region sizes<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>   */<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>    if (rss == null) {<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>      // the current server could be stopping.<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      return true;<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    }<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>    try {<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>    } catch (ServiceException se) {<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>            + " This will be retried.", ioe);<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>        return true;<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      }<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      if (rssStub == rss) {<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>        rssStub = null;<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>      }<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>      createRegionServerStatusStub(true);<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>            return false;<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>          }<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>        }<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      }<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    }<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    return true;<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>  }<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>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>   *<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>   * @param rss The stub to send to the Master<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>   * @param regionSizeStore The store containing region sizes<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>   */<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>  void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    RegionSpaceUseReportRequest request =<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    // Record the number of size reports sent<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>    if (metricsRegionServer != null) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    }<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>  }<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span><a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>  /**<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>   *<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>   * @param regionSizeStore The size in bytes of regions<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>   * @return The corresponding protocol buffer message.<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>   */<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    }<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>    return request.build();<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>  }<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span><a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>  /**<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>   * protobuf message.<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>   *<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>   * @param regionInfo The RegionInfo<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>   * @return The protocol buffer<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>   */<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    return RegionSpaceUse.newBuilder()<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>        .build();<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>  ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>      throws IOException {<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>    // the wrapper to compute those numbers in one place.<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    // history.<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>    long usedMemory = -1L;<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>    long maxMemory = -1L;<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>    if (usage != null) {<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>      usedMemory = usage.getUsed();<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>      maxMemory = usage.getMax();<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>    }<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span><a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>    for (String coprocessor : coprocessors) {<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>    }<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    for (HRegion region : regions) {<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>      if (region.getCoprocessorHost() != null) {<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>        Iterator&lt;String&gt; iterator = regionCoprocessors.iterator();<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>        while (iterator.hasNext()) {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(iterator.next()).build());<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>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>          .getCoprocessors()) {<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<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>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    if (this.infoServer != null) {<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    } else {<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>      serverLoad.setInfoServerPort(-1);<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>    // for the replicationLoad purpose. Only need to get from one executorService<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    // either source or sink will get the same info<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    ReplicationSourceService rsources = getReplicationSourceService();<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span><a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>    if (rsources != null) {<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>      // always refresh first to get the latest value<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>      ReplicationLoad rLoad = rsources.refreshAndGetReplicationLoad();<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>      if (rLoad != null) {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad.getReplicationLoadSourceList()) {<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>        }<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>      }<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>    }<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span><a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>    return serverLoad.build();<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>  }<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span><a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>  String getOnlineRegionsAsPrintableString() {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    StringBuilder sb = new StringBuilder();<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    }<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    return sb.toString();<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>  }<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>  /**<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>   * Wait on regions close.<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>   */<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    // Wait till all regions are closed before going out.<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    int lastCount = -1;<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    long previousLogTime = 0;<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    boolean interrupted = false;<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    try {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      while (!isOnlineRegionsEmpty()) {<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        int count = getNumberOfOnlineRegions();<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>        // Only print a message if the count of regions has changed.<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>        if (count != lastCount) {<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>          // Log every second at most<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>            previousLogTime = System.currentTimeMillis();<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>            lastCount = count;<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>            // Only print out regions still closing if a small number else will<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>            // swamp the log.<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>            }<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>          }<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>        }<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>        // protect against the case where an open comes in after we start the<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        // iterator of onlineRegions to close all user regions.<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>            closedRegions.add(hri.getEncodedName());<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>            // Don't update zk with this close transition; pass false.<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>            closeRegionIgnoreErrors(hri, abort);<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>        // No regions in RIT, we could stop waiting now.<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>          if (!isOnlineRegionsEmpty()) {<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>                " because some regions failed closing");<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>          }<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>          break;<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>        }<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>        if (sleep(200)) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>          interrupted = true;<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>        }<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>      }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>    } finally {<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      if (interrupted) {<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>        Thread.currentThread().interrupt();<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>  }<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span><a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  private boolean sleep(long millis) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    boolean interrupted = false;<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>    try {<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      Thread.sleep(millis);<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>    } catch (InterruptedException e) {<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      LOG.warn("Interrupted while sleeping");<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      interrupted = true;<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>    }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>    return interrupted;<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>  }<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span><a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>  private void shutdownWAL(final boolean close) {<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>    if (this.walFactory != null) {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      try {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (close) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          walFactory.close();<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        } else {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>          walFactory.shutdown();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      } catch (Throwable e) {<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      }<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    }<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>  /*<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>   *<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>   * @param c Extra configuration.<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>   */<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  throws IOException {<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>    try {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>      boolean updateRootDir = false;<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        String key = e.getName();<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        // The hostname the master sees us as.<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>              this.startcode);<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>            LOG.error(msg);<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>            throw new IOException(msg);<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          }<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>            LOG.error(msg);<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>          }<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>          continue;<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>        }<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span><a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>        String value = e.getValue();<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>            updateRootDir = true;<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><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>        if (LOG.isDebugEnabled()) {<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>        }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>        this.conf.set(key, value);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      }<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>      createMyEphemeralNode();<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>      if (updateRootDir) {<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>        initializeFileSystem();<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>      }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span><a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<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>      // Save it in a file, this will allow to see if we crash<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span><a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      setupWALAndReplication();<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          new MetricsRegionServerWrapperImpl(this), conf);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>      this.metricsTable = new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      pauseMonitor.start();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span><a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        startServices();<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      }<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>      // or make sense of it.<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      startReplicationService();<a name="line.1543"></a>
+<span class="sourceLineNo">1194</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>      request.setLoad(sl);<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>      rss.regionServerReport(null, request.build());<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    } catch (ServiceException se) {<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>        // This will be caught and handled as a fatal error in run()<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>        throw ioe;<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>      }<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>      if (rssStub == rss) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>        rssStub = null;<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>      }<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>      // Method blocks until new master is found or we are stopped<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>      createRegionServerStatusStub(true);<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>    }<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>  }<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span><a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>  /**<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>   *<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>   * @param regionSizeStore The store containing region sizes<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>   */<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>    if (rss == null) {<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      // the current server could be stopping.<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>      return true;<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>    }<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    try {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>    } catch (ServiceException se) {<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>            + " This will be retried.", ioe);<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>        return true;<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>      }<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>      if (rssStub == rss) {<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>        rssStub = null;<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      }<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>      createRegionServerStatusStub(true);<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>            return false;<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>          }<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>        }<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>      }<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>    }<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>    return true;<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>  }<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span><a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>  /**<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>   *<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>   * @param rss The stub to send to the Master<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>   * @param regionSizeStore The store containing region sizes<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>   */<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>  void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>    RegionSpaceUseReportRequest request =<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>    // Record the number of size reports sent<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>    if (metricsRegionServer != null) {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<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><a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>  /**<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>   *<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>   * @param regionSizeStore The size in bytes of regions<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>   * @return The corresponding protocol buffer message.<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>   */<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>    return request.build();<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>  /**<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>   * protobuf message.<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>   *<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>   * @param regionInfo The RegionInfo<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   * @return The protocol buffer<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>   */<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>    return RegionSpaceUse.newBuilder()<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>        .build();<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>  ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      throws IOException {<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>    // the wrapper to compute those numbers in one place.<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    // history.<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>    long usedMemory = -1L;<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    long maxMemory = -1L;<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>    if (usage != null) {<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>      usedMemory = usage.getUsed();<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>      maxMemory = usage.getMax();<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>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>    for (String coprocessor : coprocessors) {<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>    }<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>    for (HRegion region : regions) {<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>      if (region.getCoprocessorHost() != null) {<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>        Iterator&lt;String&gt; iterator = regionCoprocessors.iterator();<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>        while (iterator.hasNext()) {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(iterator.next()).build());<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>        }<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>      }<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>          .getCoprocessors()) {<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>      }<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>    }<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>    if (this.infoServer != null) {<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>    } else {<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>      serverLoad.setInfoServerPort(-1);<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>    // for the replicationLoad purpose. Only need to get from one executorService<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>    // either source or sink will get the same info<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>    ReplicationSourceService rsources = getReplicationSourceService();<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span><a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>    if (rsources != null) {<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>      // always refresh first to get the latest value<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>      ReplicationLoad rLoad = rsources.refreshAndGetReplicationLoad();<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>      if (rLoad != null) {<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad.getReplicationLoadSourceList()) {<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>        }<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>      }<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>    }<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span><a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>    return serverLoad.build();<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>  }<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span><a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>  String getOnlineRegionsAsPrintableString() {<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>    StringBuilder sb = new StringBuilder();<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>    }<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>    return sb.toString();<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>  }<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span><a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>  /**<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>   * Wait on regions close.<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>   */<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>    // Wait till all regions are closed before going out.<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>    int lastCount = -1;<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>    long previousLogTime = 0;<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>    boolean interrupted = false;<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>    try {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>      while (!isOnlineRegionsEmpty()) {<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>        int count = getNumberOfOnlineRegions();<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>        // Only print a message if the count of regions has changed.<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>        if (count != lastCount) {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>          // Log every second at most<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>            previousLogTime = System.currentTimeMillis();<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>            lastCount = count;<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>            // Only print out regions still closing if a small number else will<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>            // swamp the log.<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>            }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>          }<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>        }<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>        // protect against the case where an open comes in after we start the<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>        // iterator of onlineRegions to close all user regions.<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>            closedRegions.add(hri.getEncodedName());<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>            // Don't update zk with this close transition; pass false.<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>            closeRegionIgnoreErrors(hri, abort);<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>        // No regions in RIT, we could stop waiting now.<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>          if (!isOnlineRegionsEmpty()) {<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>                " because some regions failed closing");<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>          }<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>          break;<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>        }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>        if (sleep(200)) {<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>          interrupted = true;<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>        }<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      }<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>    } finally {<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>      if (interrupted) {<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>        Thread.currentThread().interrupt();<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><a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>  private boolean sleep(long millis) {<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>    boolean interrupted = false;<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    try {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>      Thread.sleep(millis);<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>    } catch (InterruptedException e) {<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      LOG.warn("Interrupted while sleeping");<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      interrupted = true;<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>    return interrupted;<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>  }<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span><a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>  private void shutdownWAL(final boolean close) {<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    if (this.walFactory != null) {<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>      try {<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>        if (close) {<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>          walFactory.close();<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        } else {<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>          walFactory.shutdown();<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>        }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>      } catch (Throwable e) {<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>      }<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    }<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>  }<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span><a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>  /*<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>   *<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>   * @param c Extra configuration.<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>   */<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>  throws IOException {<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>    try {<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      boolean updateRootDir = false;<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>        String key = e.getName();<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        // The hostname the master sees us as.<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>              this.startcode);<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>            LOG.error(msg);<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>            throw new IOException(msg);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>          }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>            LOG.error(msg);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>          }<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>          continue;<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>        }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span><a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>        String value = e.getValue();<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>            updateRootDir = true;<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>        if (LOG.isDebugEnabled()) {<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>        }<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>        this.conf.set(key, value);<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      createMyEphemeralNode();<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span><a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>      if (updateRootDir) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        initializeFileSystem();<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>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>      }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span><a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      // Save it in a file, this will allow to see if we crash<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span><a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      setupWALAndReplication();<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>          new MetricsRegionServerWrapperImpl(this), conf);<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      this.metricsTable = new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      pauseMonitor.start();<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span><a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>        startServices();<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>      }<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      // or make sense of it.<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      startReplicationService();<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span><a name="line.1543"></a>
 <span class="sourceLineNo">1544</span><a name="line.1544"></a>
-<span class="sourceLineNo">1545</span><a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      // Set up ZK<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.isa +<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          ", sessionid=0x" +<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>      // Wake up anyone waiting for this server to online<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>      synchronized (online) {<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>        online.set(true);<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>        online.notifyAll();<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>      }<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>    } catch (Throwable e) {<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>      stop("Failed initialization");<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"),<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          "Region server startup failed");<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    } finally {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      sleeper.skipSleepCycle();<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>  protected void initializeMemStoreChunkCreator() {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    if (MemStoreLAB.isEnabled(conf)) {<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      // MSLAB is enabled. So initialize MemStoreChunkPool<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      // By this time, the MemstoreFlusher is already initialized. We can get the global limits from<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      // it.<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      Pair&lt;Long, MemoryType&gt; pair = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      long globalMemStoreSize = pair.getFirst();<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      boolean offheap = this.regionServerAccounting.isOffheap();<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>      // When off heap memstore in use, take full area for chunk pool.<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      float poolSizePercentage = offheap? 1.0F:<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>          conf.getFloat(MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY, MemStoreLAB.POOL_MAX_SIZE_DEFAULT);<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>      float initialCountPercentage = conf.getFloat(MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY,<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          MemStoreLAB.POOL_INITIAL_SIZE_DEFAULT);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>      int chunkSize = conf.getInt(MemStoreLAB.CHUNK_SIZE_KEY, MemStoreLAB.CHUNK_SIZE_DEFAULT);<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // init the chunkCreator<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      ChunkCreator chunkCreator =<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>          ChunkCreator.initialize(chunkSize, offheap, globalMemStoreSize, poolSizePercentage,<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      initialCountPercentage, this.hMemManager);<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    }<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>  }<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span><a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>  private void startHeapMemoryManager() {<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>    this.hMemManager = HeapMemoryManager.create(this.conf, this.cacheFlusher, this,<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>        this.regionServerAccounting);<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>    if (this.hMemManager != null) {<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      this.hMemManager.start(getChoreService());<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>    }<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span><a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>  private void createMyEphemeralNode() throws KeeperException, IOException {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>  }<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span><a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>  }<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span><a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  @Override<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    return regionServerAccounting;<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>  }<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span><a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  /*<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>   * @param r Region to get RegionLoad for.<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * @return RegionLoad instance.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   *<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>   * @throws IOException<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>   */<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>    int stores = 0;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    int storefiles = 0;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    int storeUncompressedSizeMB = 0;<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    int storefileSizeMB = 0;<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>    int memstoreSizeMB = (int) (r.getMemStoreDataSize() / 1024 / 1024);<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>    long storefileIndexSizeKB = 0;<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>    int rootLevelIndexSizeKB = 0;<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>    int totalStaticIndexSizeKB = 0;<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>    int totalStaticBloomSizeKB = 0;<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    long totalCompactingKVs = 0;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    long currentCompactedKVs = 0;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    stores += storeList.size();<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    for (HStore store : storeList) {<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      storefiles += store.getStorefilesCount();<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>      //TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      storefileIndexSizeKB += store.getStorefilesRootLevelIndexSize() / 1024;<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      if (progress != null) {<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      }<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      rootLevelIndexSizeKB += (int) (store.getStorefilesRootLevelIndexSize() / 1024);<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<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>    float dataLocality =<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>        r.getHDFSBlocksDistribution().getBlockLocalityIndex(serverName.getHostname());<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    if (regionLoadBldr == null) {<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    }<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    if (regionSpecifier == null) {<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      .setStores(stores)<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>      .setStorefiles(storefiles)<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      .setMemStoreSizeMB(memstoreSizeMB)<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      .setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB)<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      .setDataLocality(dataLocality)<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span><a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    return regionLoadBldr.build();<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>   * @param encodedRegionName<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>   * @return An instance of RegionLoad.<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>   */<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="line.1688"></a>
-<span 

<TRUNCATED>

[34/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/util/ByteBufferUtils.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/ByteBufferUtils.html b/devapidocs/org/apache/hadoop/hbase/util/ByteBufferUtils.html
index f7dccb4..dfb470f 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/ByteBufferUtils.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/ByteBufferUtils.html
@@ -145,7 +145,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferUtils.html#UNSAFE_AVAIL">UNSAFE_AVAIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>(package private) static boolean</code></td>
+<td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferUtils.html#UNSAFE_UNALIGNED">UNSAFE_UNALIGNED</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
@@ -685,7 +685,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>UNSAFE_UNALIGNED</h4>
-<pre>static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.54">UNSAFE_UNALIGNED</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.53">UNSAFE_UNALIGNED</a></pre>
 </li>
 </ul>
 </li>
@@ -702,7 +702,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ByteBufferUtils</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.56">ByteBufferUtils</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.55">ByteBufferUtils</a>()</pre>
 </li>
 </ul>
 </li>
@@ -719,7 +719,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>writeVLong</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.63">writeVLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.62">writeVLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
                               long&nbsp;i)</pre>
 <div class="block">Similar to <code>WritableUtils.writeVLong(java.io.DataOutput, long)</code>,
  but writes to a <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio"><code>ByteBuffer</code></a>.</div>
@@ -731,7 +731,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readVLong</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.96">readVLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in)</pre>
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.95">readVLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in)</pre>
 <div class="block">Similar to <code>WritableUtils.readVLong(DataInput)</code> but reads from a
  <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio"><code>ByteBuffer</code></a>.</div>
 </li>
@@ -742,7 +742,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putCompressedInt</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.121">putCompressedInt</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;out,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.120">putCompressedInt</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;out,
                                    int&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>
 <div class="block">Put in buffer integer using 7 bit encoding. For each written byte:
@@ -765,7 +765,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putInt</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.143">putInt</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;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.142">putInt</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;out,
                           int&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>
 <div class="block">Put in output stream 32 bit integer (Big Endian byte order).</div>
@@ -784,7 +784,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toByte</h4>
-<pre>public static&nbsp;byte&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.155">toByte</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;byte&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.154">toByte</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                           int&nbsp;offset)</pre>
 </li>
 </ul>
@@ -794,7 +794,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>moveBufferToStream</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.169">moveBufferToStream</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;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.168">moveBufferToStream</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;out,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
                                       int&nbsp;length)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -815,7 +815,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyBufferToStream</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.184">copyBufferToStream</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;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.183">copyBufferToStream</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;out,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
                                       int&nbsp;offset,
                                       int&nbsp;length)
@@ -840,7 +840,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyBufferToStream</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.206">copyBufferToStream</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</a>&nbsp;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.205">copyBufferToStream</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</a>&nbsp;out,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
                                       int&nbsp;offset,
                                       int&nbsp;length)
@@ -865,7 +865,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putLong</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.219">putLong</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;out,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.218">putLong</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;out,
                           long&nbsp;value,
                           int&nbsp;fitInBytes)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -881,7 +881,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putByte</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.229">putByte</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.228">putByte</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                           int&nbsp;offset,
                           byte&nbsp;b)</pre>
 </li>
@@ -892,7 +892,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>longFitsIn</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.243">longFitsIn</a>(long&nbsp;value)</pre>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.242">longFitsIn</a>(long&nbsp;value)</pre>
 <div class="block">Check how many bytes are required to store value.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -908,7 +908,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>intFitsIn</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.279">intFitsIn</a>(int&nbsp;value)</pre>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.278">intFitsIn</a>(int&nbsp;value)</pre>
 <div class="block">Check how many bytes is required to store value.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -924,7 +924,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readCompressedInt</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.301">readCompressedInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;input)
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.300">readCompressedInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;input)
                              throws <a href="https://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">Read integer from stream coded in 7 bits and increment position.</div>
 <dl>
@@ -941,7 +941,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readCompressedInt</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.322">readCompressedInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer)</pre>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.321">readCompressedInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer)</pre>
 <div class="block">Read integer from buffer coded in 7 bits and increment position.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -955,7 +955,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readLong</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.336">readLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;in,
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.335">readLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;in,
                             int&nbsp;fitInBytes)
                      throws <a href="https://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">Read long which was written to fitInBytes bytes and increment position.</div>
@@ -975,7 +975,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readLong</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.350">readLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.349">readLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
                             int&nbsp;fitInBytes)</pre>
 <div class="block">Read long which was written to fitInBytes bytes and increment position.</div>
 <dl>
@@ -992,7 +992,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyFromStreamToBuffer</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.365">copyFromStreamToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.364">copyFromStreamToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/io/DataInputStream.html?is-external=true" title="class or interface in java.io">DataInputStream</a>&nbsp;in,
                                           int&nbsp;length)
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1014,7 +1014,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>drainInputStreamToBuffer</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.381">drainInputStreamToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;is)
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.380">drainInputStreamToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;is)
                                            throws <a href="https://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">Copy from the InputStream to a new heap ByteBuffer until the InputStream is exhausted.</div>
 <dl>
@@ -1029,7 +1029,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyFromBufferToBuffer</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.396">copyFromBufferToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.395">copyFromBufferToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out)</pre>
 <div class="block">Copy one buffer's whole data to another. Write starts at the current position of 'out' buffer.
  Note : This will advance the position marker of <code>out</code> and also change the position maker
@@ -1047,7 +1047,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyFromBufferToBuffer</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.421">copyFromBufferToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.420">copyFromBufferToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
                                           int&nbsp;sourceOffset,
                                           int&nbsp;destinationOffset,
@@ -1070,7 +1070,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyFromBufferToBuffer</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.448">copyFromBufferToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.447">copyFromBufferToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
                                           int&nbsp;sourceOffset,
                                           int&nbsp;length)</pre>
@@ -1093,7 +1093,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>findCommonPrefix</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.472">findCommonPrefix</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.471">findCommonPrefix</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                                    int&nbsp;offsetLeft,
                                    int&nbsp;offsetRight,
                                    int&nbsp;limit)</pre>
@@ -1115,7 +1115,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>findCommonPrefix</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.494">findCommonPrefix</a>(byte[]&nbsp;left,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.493">findCommonPrefix</a>(byte[]&nbsp;left,
                                    int&nbsp;leftOffset,
                                    int&nbsp;leftLength,
                                    byte[]&nbsp;right,
@@ -1139,7 +1139,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>findCommonPrefix</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.517">findCommonPrefix</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;left,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.516">findCommonPrefix</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;left,
                                    int&nbsp;leftOffset,
                                    int&nbsp;leftLength,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;right,
@@ -1163,7 +1163,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>arePartsEqual</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.539">arePartsEqual</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.538">arePartsEqual</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                                     int&nbsp;offsetLeft,
                                     int&nbsp;lengthLeft,
                                     int&nbsp;offsetRight,
@@ -1187,7 +1187,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>skip</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.565">skip</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.564">skip</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                         int&nbsp;length)</pre>
 <div class="block">Increment position in buffer.</div>
 <dl>
@@ -1203,7 +1203,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>extendLimit</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.569">extendLimit</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.568">extendLimit</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                                int&nbsp;numBytes)</pre>
 </li>
 </ul>
@@ -1213,7 +1213,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toBytes</h4>
-<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.580">toBytes</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.579">toBytes</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                              int&nbsp;startPosition)</pre>
 <div class="block">Copy the bytes from position to limit into a new byte[] of the exact length and sets the
  position and limit back to their original values (though not thread safe).</div>
@@ -1232,7 +1232,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toBytes</h4>
-<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.596">toBytes</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.595">toBytes</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                              int&nbsp;offset,
                              int&nbsp;length)</pre>
 <div class="block">Copy the given number of bytes from specified offset into a new byte[]</div>
@@ -1252,7 +1252,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.604">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf1,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.603">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf1,
                              int&nbsp;o1,
                              int&nbsp;l1,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf2,
@@ -1266,7 +1266,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.624">hashCode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.623">hashCode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
                            int&nbsp;offset,
                            int&nbsp;length)</pre>
 <dl>
@@ -1283,7 +1283,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.632">compareTo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf1,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.631">compareTo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf1,
                             int&nbsp;o1,
                             int&nbsp;l1,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf2,
@@ -1297,7 +1297,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.662">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf1,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.663">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf1,
                              int&nbsp;o1,
                              int&nbsp;l1,
                              byte[]&nbsp;buf2,
@@ -1311,7 +1311,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.674">compareTo</a>(byte[]&nbsp;buf1,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.680">compareTo</a>(byte[]&nbsp;buf1,
                             int&nbsp;o1,
                             int&nbsp;l1,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf2,
@@ -1325,7 +1325,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.701">compareTo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf1,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.705">compareTo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf1,
                             int&nbsp;o1,
                             int&nbsp;l1,
                             byte[]&nbsp;buf2,
@@ -1339,7 +1339,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>compareToUnsafe</h4>
-<pre>static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.726">compareToUnsafe</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>&nbsp;obj1,
+<pre>static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.730">compareToUnsafe</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>&nbsp;obj1,
                            long&nbsp;o1,
                            int&nbsp;l1,
                            <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>&nbsp;obj2,
@@ -1353,7 +1353,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toShort</h4>
-<pre>public static&nbsp;short&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.775">toShort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;short&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.779">toShort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                             int&nbsp;offset)</pre>
 <div class="block">Reads a short value at the given buffer's offset.</div>
 <dl>
@@ -1371,7 +1371,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toInt</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.786">toInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer)</pre>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.790">toInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer)</pre>
 <div class="block">Reads an int value at the given buffer's current position. Also advances the buffer's position</div>
 </li>
 </ul>
@@ -1381,7 +1381,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toInt</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.802">toInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.806">toInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                         int&nbsp;offset)</pre>
 <div class="block">Reads an int value at the given buffer's offset.</div>
 <dl>
@@ -1399,7 +1399,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readAsInt</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.820">readAsInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.824">readAsInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
                             int&nbsp;offset,
                             int&nbsp;length)</pre>
 <div class="block">Converts a ByteBuffer to an int value</div>
@@ -1421,7 +1421,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toLong</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.839">toLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.843">toLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                           int&nbsp;offset)</pre>
 <div class="block">Reads a long value at the given buffer's offset.</div>
 <dl>
@@ -1439,7 +1439,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putInt</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.853">putInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.857">putInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                           int&nbsp;val)</pre>
 <div class="block">Put an int value out to the given ByteBuffer's current position in big-endian format.
  This also advances the position in buffer by int size.</div>
@@ -1456,7 +1456,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putInt</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.862">putInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.866">putInt</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                          int&nbsp;index,
                          int&nbsp;val)</pre>
 </li>
@@ -1467,7 +1467,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toDouble</h4>
-<pre>public static&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.876">toDouble</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.880">toDouble</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                               int&nbsp;offset)</pre>
 <div class="block">Reads a double value at the given buffer's offset.</div>
 <dl>
@@ -1485,7 +1485,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toBigDecimal</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html?is-external=true" title="class or interface in java.math">BigDecimal</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.886">toBigDecimal</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html?is-external=true" title="class or interface in java.math">BigDecimal</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.890">toBigDecimal</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                                       int&nbsp;offset,
                                       int&nbsp;length)</pre>
 <div class="block">Reads a BigDecimal value at the given buffer's offset.</div>
@@ -1504,7 +1504,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putShort</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.904">putShort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.908">putShort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                             short&nbsp;val)</pre>
 <div class="block">Put a short value out to the given ByteBuffer's current position in big-endian format.
  This also advances the position in buffer by short size.</div>
@@ -1521,7 +1521,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putShort</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.913">putShort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.917">putShort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                            int&nbsp;index,
                            short&nbsp;val)</pre>
 </li>
@@ -1532,7 +1532,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putAsShort</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.921">putAsShort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.925">putAsShort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
                              int&nbsp;index,
                              int&nbsp;val)</pre>
 </li>
@@ -1543,7 +1543,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putLong</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.934">putLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.938">putLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                            long&nbsp;val)</pre>
 <div class="block">Put a long value out to the given ByteBuffer's current position in big-endian format.
  This also advances the position in buffer by long size.</div>
@@ -1560,7 +1560,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putLong</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.943">putLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.947">putLong</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                           int&nbsp;index,
                           long&nbsp;val)</pre>
 </li>
@@ -1571,7 +1571,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyFromArrayToBuffer</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.959">copyFromArrayToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.963">copyFromArrayToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
                                          byte[]&nbsp;in,
                                          int&nbsp;inOffset,
                                          int&nbsp;length)</pre>
@@ -1592,7 +1592,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyFromArrayToBuffer</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.981">copyFromArrayToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.985">copyFromArrayToBuffer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;out,
                                          int&nbsp;outOffset,
                                          byte[]&nbsp;in,
                                          int&nbsp;inOffset,
@@ -1614,7 +1614,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyFromBufferToArray</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.1003">copyFromBufferToArray</a>(byte[]&nbsp;out,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.1007">copyFromBufferToArray</a>(byte[]&nbsp;out,
                                          <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;in,
                                          int&nbsp;sourceOffset,
                                          int&nbsp;destinationOffset,
@@ -1637,7 +1637,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyOfRange</h4>
-<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.1023">copyOfRange</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;original,
+<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html#line.1027">copyOfRange</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;original,
                                  int&nbsp;from,
                                  int&nbsp;to)</pre>
 <div class="block">Similar to  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html?is-external=true#copyOfRange-byte:A-int-int-" title="class or interface in java.util"><code>Arrays.copyOfRange(byte[], int, int)</code></a></div>
@@ -1657,7 +1657,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toStringBinary</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/util/ByteBufferUtils.html#line.1032">toStringBinary</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;b,
+<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/util/ByteBufferUtils.html#line.1036">toStringBinary</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;b,
                                     int&nbsp;off,
                                     int&nbsp;len)</pre>
 </li>
@@ -1668,7 +1668,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toStringBinary</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/util/ByteBufferUtils.html#line.1051">toStringBinary</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;b)</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/util/ByteBufferUtils.html#line.1055">toStringBinary</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;b)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/util/MapReduceExtendedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/MapReduceExtendedCell.html b/devapidocs/org/apache/hadoop/hbase/util/MapReduceExtendedCell.html
index b709f29..d27596b 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/MapReduceExtendedCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/MapReduceExtendedCell.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <hr>
 <br>
@@ -395,7 +395,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ByteBufferExtendedCell.h
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/util/UnsafeAccess.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/UnsafeAccess.html b/devapidocs/org/apache/hadoop/hbase/util/UnsafeAccess.html
index 978a644..32a0b6e 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/UnsafeAccess.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/UnsafeAccess.html
@@ -138,8 +138,8 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>(package private) static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/UnsafeAccess.html#littleEndian">littleEndian</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/UnsafeAccess.html#LITTLE_ENDIAN">LITTLE_ENDIAN</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static org.slf4j.Logger</code></td>
@@ -437,13 +437,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="block">The offset to the first element in a byte array.</div>
 </li>
 </ul>
-<a name="littleEndian">
+<a name="LITTLE_ENDIAN">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>littleEndian</h4>
-<pre>static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/UnsafeAccess.html#line.45">littleEndian</a></pre>
+<h4>LITTLE_ENDIAN</h4>
+<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/UnsafeAccess.html#line.45">LITTLE_ENDIAN</a></pre>
 </li>
 </ul>
 <a name="UNSAFE_COPY_THRESHOLD">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 845224b..2b33b03 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -532,14 +532,14 @@
 <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/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/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.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/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/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</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/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/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/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</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/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/wal/WALFactory.Providers.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALFactory.Providers.html b/devapidocs/org/apache/hadoop/hbase/wal/WALFactory.Providers.html
index 9cce7d0..e5c4f0b 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALFactory.Providers.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALFactory.Providers.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.67">WALFactory.Providers</a>
+<pre>static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.69">WALFactory.Providers</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/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal">WALFactory.Providers</a>&gt;</pre>
 <div class="block">Maps between configuration names for providers and implementation classes.</div>
 </li>
@@ -236,7 +236,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>defaultProvider</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal">WALFactory.Providers</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html#line.68">defaultProvider</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal">WALFactory.Providers</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html#line.70">defaultProvider</a></pre>
 </li>
 </ul>
 <a name="filesystem">
@@ -245,7 +245,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>filesystem</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal">WALFactory.Providers</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html#line.69">filesystem</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal">WALFactory.Providers</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html#line.71">filesystem</a></pre>
 </li>
 </ul>
 <a name="multiwal">
@@ -254,7 +254,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>multiwal</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal">WALFactory.Providers</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html#line.70">multiwal</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal">WALFactory.Providers</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html#line.72">multiwal</a></pre>
 </li>
 </ul>
 <a name="asyncfs">
@@ -263,7 +263,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>asyncfs</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal">WALFactory.Providers</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html#line.71">asyncfs</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal">WALFactory.Providers</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html#line.73">asyncfs</a></pre>
 </li>
 </ul>
 </li>
@@ -280,7 +280,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>clazz</h4>
-<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html#line.73">clazz</a></pre>
+<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html#line.75">clazz</a></pre>
 </li>
 </ul>
 </li>
@@ -297,7 +297,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal">WALFactory.Providers</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html#line.67">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal">WALFactory.Providers</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html#line.69">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -317,7 +317,7 @@ for (WALFactory.Providers c : WALFactory.Providers.values())
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal">WALFactory.Providers</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html#line.67">valueOf</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 static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal">WALFactory.Providers</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html#line.69">valueOf</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">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are 


[40/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
index 46a36b5..1f9814b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3474">HRegionServer.MovedRegionsCleaner</a>
+<pre>protected static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3471">HRegionServer.MovedRegionsCleaner</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></pre>
 <div class="block">Creates a Chore thread to clean the moved region cache.</div>
@@ -242,7 +242,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServer</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3475">regionServer</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3472">regionServer</a></pre>
 </li>
 </ul>
 <a name="stoppable">
@@ -251,7 +251,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockListLast">
 <li class="blockList">
 <h4>stoppable</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3476">stoppable</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3473">stoppable</a></pre>
 </li>
 </ul>
 </li>
@@ -268,7 +268,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MovedRegionsCleaner</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3478">MovedRegionsCleaner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;regionServer,
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3475">MovedRegionsCleaner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;regionServer,
                             <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stoppable)</pre>
 </li>
 </ul>
@@ -286,7 +286,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionsCleaner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3486">create</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs)</pre>
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionsCleaner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3483">create</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs)</pre>
 </li>
 </ul>
 <a name="chore--">
@@ -295,7 +295,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>chore</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3497">chore</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3494">chore</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore--">ScheduledChore</a></code></span></div>
 <div class="block">The task to execute on each scheduled execution of the Chore</div>
 <dl>
@@ -310,7 +310,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3502">stop</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;why)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3499">stop</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;why)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#stop-java.lang.String-">Stoppable</a></code></span></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -328,7 +328,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3507">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3504">isStopped</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#isStopped--">isStopped</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
index a9b1c72..0bed128 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1757">HRegionServer.PeriodicMemStoreFlusher</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1756">HRegionServer.PeriodicMemStoreFlusher</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></pre>
 </li>
 </ul>
@@ -228,7 +228,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>server</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1758">server</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1757">server</a></pre>
 </li>
 </ul>
 <a name="RANGE_OF_DELAY">
@@ -237,7 +237,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>RANGE_OF_DELAY</h4>
-<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1759">RANGE_OF_DELAY</a></pre>
+<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1758">RANGE_OF_DELAY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.PeriodicMemStoreFlusher.RANGE_OF_DELAY">Constant Field Values</a></dd>
@@ -250,7 +250,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MIN_DELAY_TIME</h4>
-<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1760">MIN_DELAY_TIME</a></pre>
+<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1759">MIN_DELAY_TIME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.PeriodicMemStoreFlusher.MIN_DELAY_TIME">Constant Field Values</a></dd>
@@ -271,7 +271,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>PeriodicMemStoreFlusher</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1761">PeriodicMemStoreFlusher</a>(int&nbsp;cacheFlushInterval,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1760">PeriodicMemStoreFlusher</a>(int&nbsp;cacheFlushInterval,
                                <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;server)</pre>
 </li>
 </ul>
@@ -289,7 +289,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>chore</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1767">chore</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1766">chore</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore--">ScheduledChore</a></code></span></div>
 <div class="block">The task to execute on each scheduled execution of the Chore</div>
 <dl>


[41/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-summary.html b/devapidocs/org/apache/hadoop/hbase/package-summary.html
index afe234c..84822ae 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-summary.html
@@ -291,12 +291,19 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/BBKVComparator.html" title="class in org.apache.hadoop.hbase">BBKVComparator</a></td>
+<td class="colLast">
+<div class="block">A comparator for case where <a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase"><code>ByteBufferKeyValue</code></a> is prevalent type (BBKV
+ is base-type in hbase2).</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase">ByteBufferExtendedCell</a></td>
 <td class="colLast">
 <div class="block">This class is a server side extension to the <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> interface.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferKeyOnlyKeyValue</a></td>
 <td class="colLast">
 <div class="block">This is a key only Cell implementation which is identical to <a href="../../../../org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase"><code>KeyValue.KeyOnlyKeyValue</code></a>
@@ -304,223 +311,223 @@
  (onheap and offheap).</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferKeyValue</a></td>
 <td class="colLast">
 <div class="block">This Cell is an implementation of <a href="../../../../org/apache/hadoop/hbase/ByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase"><code>ByteBufferExtendedCell</code></a> where the data resides in
  off heap/ on heap ByteBuffer</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ByteBufferTag.html" title="class in org.apache.hadoop.hbase">ByteBufferTag</a></td>
 <td class="colLast">
 <div class="block">This is a <a href="../../../../org/apache/hadoop/hbase/Tag.html" title="interface in org.apache.hadoop.hbase"><code>Tag</code></a> implementation in which value is backed by
  <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio"><code>ByteBuffer</code></a></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/CacheEvictionStats.html" title="class in org.apache.hadoop.hbase">CacheEvictionStats</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/CacheEvictionStatsAggregator.html" title="class in org.apache.hadoop.hbase">CacheEvictionStatsAggregator</a></td>
 <td class="colLast">
 <div class="block">Used to merge CacheEvictionStats.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/CacheEvictionStatsBuilder.html" title="class in org.apache.hadoop.hbase">CacheEvictionStatsBuilder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/CellBuilderFactory.html" title="class in org.apache.hadoop.hbase">CellBuilderFactory</a></td>
 <td class="colLast">
 <div class="block">Create a CellBuilder instance.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a></td>
 <td class="colLast">
 <div class="block">Compare two HBase cells.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl.MetaCellComparator</a></td>
 <td class="colLast">
 <div class="block">A <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase"><code>CellComparatorImpl</code></a> for <code>hbase:meta</code> catalog table
  <a href="../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase"><code>KeyValue</code></a>s.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/CellUtil.html" title="class in org.apache.hadoop.hbase">CellUtil</a></td>
 <td class="colLast">
 <div class="block">Utility methods helpful for slinging <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> instances.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></td>
 <td class="colLast">
 <div class="block">ChoreService is a service that can be used to schedule instances of <a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase"><code>ScheduledChore</code></a> to run
  periodically while sharing threads.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html" title="class in org.apache.hadoop.hbase">ChoreService.ChoreServiceThreadFactory</a></td>
 <td class="colLast">
 <div class="block">Custom ThreadFactory used with the ScheduledThreadPoolExecutor so that all the threads are
  daemon threads, and thus, don't prevent the JVM from shutting down</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ClusterId.html" title="class in org.apache.hadoop.hbase">ClusterId</a></td>
 <td class="colLast">
 <div class="block">The identifier for this cluster.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ClusterMetricsBuilder.html" title="class in org.apache.hadoop.hbase">ClusterMetricsBuilder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ClusterMetricsBuilder.ClusterMetricsImpl.html" title="class in org.apache.hadoop.hbase">ClusterMetricsBuilder.ClusterMetricsImpl</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ClusterStatus.html" title="class in org.apache.hadoop.hbase">ClusterStatus</a></td>
 <td class="colLast">Deprecated
 <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/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase"><code>ClusterMetrics</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/CompatibilityFactory.html" title="class in org.apache.hadoop.hbase">CompatibilityFactory</a></td>
 <td class="colLast">
 <div class="block">Class that will create many instances of classes provided by the hbase-hadoop{1|2}-compat jars.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.html" title="class in org.apache.hadoop.hbase">CompatibilitySingletonFactory</a></td>
 <td class="colLast">
 <div class="block">Factory for classes supplied by hadoop compatibility modules.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/CompoundConfiguration.html" title="class in org.apache.hadoop.hbase">CompoundConfiguration</a></td>
 <td class="colLast">
 <div class="block">Do a shallow merge of multiple KV configuration pools.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/CompoundConfiguration.ImmutableConfWrapper.html" title="class in org.apache.hadoop.hbase">CompoundConfiguration.ImmutableConfWrapper</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/DaemonThreadFactory.html" title="class in org.apache.hadoop.hbase">DaemonThreadFactory</a></td>
 <td class="colLast">
 <div class="block">Thread factory that creates daemon threads</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ExtendedCellBuilderFactory.html" title="class in org.apache.hadoop.hbase">ExtendedCellBuilderFactory</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ExtendedCellBuilderImpl.html" title="class in org.apache.hadoop.hbase">ExtendedCellBuilderImpl</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HBaseConfiguration.html" title="class in org.apache.hadoop.hbase">HBaseConfiguration</a></td>
 <td class="colLast">
 <div class="block">Adds HBase configuration files to a Configuration</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HBaseInterfaceAudience.html" title="class in org.apache.hadoop.hbase">HBaseInterfaceAudience</a></td>
 <td class="colLast">
 <div class="block">This class defines constants for different classes of hbase limited private apis</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a></td>
 <td class="colLast">Deprecated</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HConstants.html" title="class in org.apache.hadoop.hbase">HConstants</a></td>
 <td class="colLast">
 <div class="block">HConstants holds a bunch of HBase-related constants</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a></td>
 <td class="colLast">
 <div class="block">Data structure to describe the distribution of HDFS blocks among hosts.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.HostAndWeight.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution.HostAndWeight</a></td>
 <td class="colLast">
 <div class="block">Stores the hostname and weight for that hostname.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.HostAndWeight.WeightComparator.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution.HostAndWeight.WeightComparator</a></td>
 <td class="colLast">
 <div class="block">comparator used to sort hosts based on weight</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HealthCheckChore.html" title="class in org.apache.hadoop.hbase">HealthCheckChore</a></td>
 <td class="colLast">
 <div class="block">The Class HealthCheckChore for running health checker regularly.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HealthChecker.html" title="class in org.apache.hadoop.hbase">HealthChecker</a></td>
 <td class="colLast">
 <div class="block">A utility for executing an external script that checks the health of
  the node.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HealthReport.html" title="class in org.apache.hadoop.hbase">HealthReport</a></td>
 <td class="colLast">
 <div class="block">The Class HealthReport containing information about health of the node.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a></td>
 <td class="colLast">Deprecated
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a></td>
 <td class="colLast">
 <div class="block">Data structure to hold RegionInfo and the address for the hosting
  HRegionServer.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></td>
 <td class="colLast">Deprecated
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/IndividualBytesFieldCell.html" title="class in org.apache.hadoop.hbase">IndividualBytesFieldCell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/IndividualBytesFieldCellBuilder.html" title="class in org.apache.hadoop.hbase">IndividualBytesFieldCellBuilder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/JitterScheduledThreadPoolExecutorImpl.html" title="class in org.apache.hadoop.hbase">JitterScheduledThreadPoolExecutorImpl</a></td>
 <td class="colLast">
 <div class="block">ScheduledThreadPoolExecutor that will add some jitter to the RunnableScheduledFuture.getDelay.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/JMXListener.html" title="class in org.apache.hadoop.hbase">JMXListener</a></td>
 <td class="colLast">
 <div class="block">Pluggable JMX Agent for HBase(to fix the 2 random TCP ports issue
@@ -530,336 +537,336 @@
  3)support subset of SSL (with default configuration)</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a></td>
 <td class="colLast">
 <div class="block">An HBase Key/Value.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue.KeyOnlyKeyValue</a></td>
 <td class="colLast">
 <div class="block">A simple form of KeyValue that creates a keyvalue with only the key part of the byte[]
  Mainly used in places where we need to compare two cells.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/KeyValue.KVComparator.html" title="class in org.apache.hadoop.hbase">KeyValue.KVComparator</a></td>
 <td class="colLast">Deprecated
 <div class="block"><span class="deprecationComment">: Use <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase"><code>CellComparatorImpl</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/KeyValue.MetaComparator.html" title="class in org.apache.hadoop.hbase">KeyValue.MetaComparator</a></td>
 <td class="colLast">Deprecated
 <div class="block"><span class="deprecationComment">: <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#META_COMPARATOR"><code>CellComparatorImpl.META_COMPARATOR</code></a> to be used.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/KeyValueBuilder.html" title="class in org.apache.hadoop.hbase">KeyValueBuilder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/KeyValueTestUtil.html" title="class in org.apache.hadoop.hbase">KeyValueTestUtil</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/KeyValueUtil.html" title="class in org.apache.hadoop.hbase">KeyValueUtil</a></td>
 <td class="colLast">
 <div class="block">static convenience methods for dealing with KeyValues and collections of KeyValues</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/LocalHBaseCluster.html" title="class in org.apache.hadoop.hbase">LocalHBaseCluster</a></td>
 <td class="colLast">
 <div class="block">This class creates a single process HBase cluster.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.html" title="class in org.apache.hadoop.hbase">MetaTableAccessor</a></td>
 <td class="colLast">
 <div class="block">
  Read/write operations on region and assignment information store in <code>hbase:meta</code>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.CollectAllVisitor.html" title="class in org.apache.hadoop.hbase">MetaTableAccessor.CollectAllVisitor</a></td>
 <td class="colLast">
 <div class="block">Collects all returned.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.CollectingVisitor.html" title="class in org.apache.hadoop.hbase">MetaTableAccessor.CollectingVisitor</a>&lt;T&gt;</td>
 <td class="colLast">
 <div class="block">A <a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.Visitor.html" title="interface in org.apache.hadoop.hbase"><code>MetaTableAccessor.Visitor</code></a> that collects content out of passed <a href="../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client"><code>Result</code></a>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.DefaultVisitorBase.html" title="class in org.apache.hadoop.hbase">MetaTableAccessor.DefaultVisitorBase</a></td>
 <td class="colLast">
 <div class="block">A Visitor that skips offline regions and split parents</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.ReplicationBarrierResult.html" title="class in org.apache.hadoop.hbase">MetaTableAccessor.ReplicationBarrierResult</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.TableVisitorBase.html" title="class in org.apache.hadoop.hbase">MetaTableAccessor.TableVisitorBase</a></td>
 <td class="colLast">
 <div class="block">A Visitor for a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a></td>
 <td class="colLast">
 <div class="block">Namespace POJO class.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/NamespaceDescriptor.Builder.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor.Builder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/NoTagsByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">NoTagsByteBufferKeyValue</a></td>
 <td class="colLast">
 <div class="block">An extension of the ByteBufferKeyValue where the tags length is always 0</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/NoTagsKeyValue.html" title="class in org.apache.hadoop.hbase">NoTagsKeyValue</a></td>
 <td class="colLast">
 <div class="block">An extension of the KeyValue where the tags length is always 0</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil</a></td>
 <td class="colLast">
 <div class="block">Utility methods helpful slinging <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> instances.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.EmptyByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.EmptyByteBufferExtendedCell</a></td>
 <td class="colLast">
 <div class="block">These cells are used in reseeks/seeks to improve the read performance.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.EmptyCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.EmptyCell</a></td>
 <td class="colLast">
 <div class="block">These cells are used in reseeks/seeks to improve the read performance.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.FirstOnRowByteBufferExtendedCell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.FirstOnRowCell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.FirstOnRowColByteBufferExtendedCell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.FirstOnRowColCell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColTSByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.FirstOnRowColTSByteBufferExtendedCell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowColTSCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.FirstOnRowColTSCell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.FirstOnRowDeleteFamilyCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.FirstOnRowDeleteFamilyCell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.LastOnRowByteBufferExtendedCell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.LastOnRowCell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowColByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.LastOnRowColByteBufferExtendedCell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.LastOnRowColCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.LastOnRowColCell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.TagRewriteByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.TagRewriteByteBufferExtendedCell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.TagRewriteCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.TagRewriteCell</a></td>
 <td class="colLast">
 <div class="block">This can be used when a Cell has to change with addition/removal of one or more tags.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.ValueAndTagRewriteByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.ValueAndTagRewriteByteBufferExtendedCell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/PrivateCellUtil.ValueAndTagRewriteCell.html" title="class in org.apache.hadoop.hbase">PrivateCellUtil.ValueAndTagRewriteCell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/RawCellBuilderFactory.html" title="class in org.apache.hadoop.hbase">RawCellBuilderFactory</a></td>
 <td class="colLast">
 <div class="block">Factory for creating cells for CPs.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/RegionLoad.html" title="class in org.apache.hadoop.hbase">RegionLoad</a></td>
 <td class="colLast">Deprecated
 <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/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a></td>
 <td class="colLast">
 <div class="block">Container for holding a list of <a href="../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase"><code>HRegionLocation</code></a>'s that correspond to the
  same range.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/RegionMetricsBuilder.html" title="class in org.apache.hadoop.hbase">RegionMetricsBuilder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/RegionMetricsBuilder.RegionMetricsImpl.html" title="class in org.apache.hadoop.hbase">RegionMetricsBuilder.RegionMetricsImpl</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/RSGroupTableAccessor.html" title="class in org.apache.hadoop.hbase">RSGroupTableAccessor</a></td>
 <td class="colLast">
 <div class="block">Read rs group information from  <code>hbase:rsgroup</code>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></td>
 <td class="colLast">
 <div class="block">ScheduledChore is a task performed on a period in hbase.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ServerLoad.html" title="class in org.apache.hadoop.hbase">ServerLoad</a></td>
 <td class="colLast">Deprecated
 <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/ServerMetrics.html" title="interface in org.apache.hadoop.hbase"><code>ServerMetrics</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ServerMetricsBuilder.html" title="class in org.apache.hadoop.hbase">ServerMetricsBuilder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ServerMetricsBuilder.ServerMetricsImpl.html" title="class in org.apache.hadoop.hbase">ServerMetricsBuilder.ServerMetricsImpl</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></td>
 <td class="colLast">
 <div class="block">Name of a particular incarnation of an HBase Server.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/SharedConnection.html" title="class in org.apache.hadoop.hbase">SharedConnection</a></td>
 <td class="colLast">
 <div class="block">Wraps a Connection to make it can't be closed or aborted.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/Size.html" title="class in org.apache.hadoop.hbase">Size</a></td>
 <td class="colLast">
 <div class="block">It is used to represent the size with different units.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/SizeCachedKeyValue.html" title="class in org.apache.hadoop.hbase">SizeCachedKeyValue</a></td>
 <td class="colLast">
 <div class="block">This class is an extension to KeyValue where rowLen and keyLen are cached.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/SizeCachedNoTagsKeyValue.html" title="class in org.apache.hadoop.hbase">SizeCachedNoTagsKeyValue</a></td>
 <td class="colLast">
 <div class="block">This class is an extension to ContentSizeCachedKeyValue where there are no tags in Cell.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/SplitLogCounters.html" title="class in org.apache.hadoop.hbase">SplitLogCounters</a></td>
 <td class="colLast">
 <div class="block">Counters kept by the distributed WAL split log process.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/SplitLogTask.html" title="class in org.apache.hadoop.hbase">SplitLogTask</a></td>
 <td class="colLast">
 <div class="block">State of a WAL log split during distributed splitting.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/SplitLogTask.Done.html" title="class in org.apache.hadoop.hbase">SplitLogTask.Done</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/SplitLogTask.Err.html" title="class in org.apache.hadoop.hbase">SplitLogTask.Err</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/SplitLogTask.Owned.html" title="class in org.apache.hadoop.hbase">SplitLogTask.Owned</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/SplitLogTask.Resigned.html" title="class in org.apache.hadoop.hbase">SplitLogTask.Resigned</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/SplitLogTask.Unassigned.html" title="class in org.apache.hadoop.hbase">SplitLogTask.Unassigned</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/SslRMIClientSocketFactorySecure.html" title="class in org.apache.hadoop.hbase">SslRMIClientSocketFactorySecure</a></td>
 <td class="colLast">
 <div class="block">Avoid SSL V3.0 "Poodle" Vulnerability - CVE-2014-3566</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/SslRMIServerSocketFactorySecure.html" title="class in org.apache.hadoop.hbase">SslRMIServerSocketFactorySecure</a></td>
 <td class="colLast">
 <div class="block">Avoid SSL V3.0 "Poodle" Vulnerability - CVE-2014-3566</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></td>
 <td class="colLast">
 <div class="block">Immutable POJO class for representing a table name.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/TagType.html" title="class in org.apache.hadoop.hbase">TagType</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/TagUtil.html" title="class in org.apache.hadoop.hbase">TagUtil</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/Version.html" title="class in org.apache.hadoop.hbase">Version</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ZKNamespaceManager.html" title="class in org.apache.hadoop.hbase">ZKNamespaceManager</a></td>
 <td class="colLast">
 <div class="block">Class servers two purposes:
@@ -867,7 +874,7 @@
  1.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ZNodeClearer.html" title="class in org.apache.hadoop.hbase">ZNodeClearer</a></td>
 <td class="colLast">
 <div class="block">Contains a set of methods for the collaboration between the start/stop scripts and the

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index c3fdff4..38df5bd 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -108,6 +108,7 @@
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/AsyncMetaTableAccessor.MetaTableScanResultConsumer.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">AsyncMetaTableAccessor.MetaTableScanResultConsumer</span></a> (implements org.apache.hadoop.hbase.client.<a href="../../../../org/apache/hadoop/hbase/client/AdvancedScanResultConsumer.html" title="interface in org.apache.hadoop.hbase.client">AdvancedScanResultConsumer</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">AuthUtil</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/BaseConfigurable.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">BaseConfigurable</span></a> (implements org.apache.hadoop.conf.Configurable)</li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/BBKVComparator.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">BBKVComparator</span></a> (implements java.util.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">ByteBufferExtendedCell</span></a> (implements org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">ByteBufferKeyOnlyKeyValue</span></a></li>
@@ -189,10 +190,10 @@
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">HRegionInfo</span></a> (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;, org.apache.hadoop.hbase.client.<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">HRegionLocation</span></a> (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;)</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">HTableDescriptor</span></a> (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;, org.apache.hadoop.hbase.client.<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IndividualBytesFieldCell.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">IndividualBytesFieldCell</span></a> (implements org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IndividualBytesFieldCell.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">IndividualBytesFieldCell</span></a> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/JitterScheduledThreadPoolExecutorImpl.JitteredRunnableScheduledFuture.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">JitterScheduledThreadPoolExecutorImpl.JitteredRunnableScheduledFuture</span></a>&lt;V&gt; (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/RunnableScheduledFuture.html?is-external=true" title="class or interface in java.util.concurrent">RunnableScheduledFuture</a>&lt;V&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/JMXListener.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">JMXListener</span></a> (implements org.apache.hadoop.hbase.coprocessor.<a href="../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessor</a>, org.apache.hadoop.hbase.coprocessor.<a href="../../../../org/apache/hadoop/hbase/coprocessor/RegionServerCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionServerCoprocessor</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue</span></a> (implements org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>)
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue</span></a> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.KeyOnlyKeyValue</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/NoTagsKeyValue.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">NoTagsKeyValue</span></a></li>
@@ -373,7 +374,7 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">RawCell</span></a>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">ExtendedCell</span></a> (also extends java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, org.apache.hadoop.hbase.io.<a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">ExtendedCell</span></a> (also extends org.apache.hadoop.hbase.io.<a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>)</li>
 </ul>
 </li>
 </ul>
@@ -389,11 +390,6 @@
 </li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellScannable.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">CellScannable</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">CellScanner</span></a></li>
-<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Cloneable</span></a>
-<ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">ExtendedCell</span></a> (also extends org.apache.hadoop.hbase.io.<a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a>)</li>
-</ul>
-</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics</span></a></li>
 <li type="circle">java.util.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><span class="typeNameLink">Comparator</span></a>&lt;T&gt;
 <ul>
@@ -405,7 +401,7 @@
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">CoprocessorEnvironment</span></a>&lt;C&gt;</li>
 <li type="circle">org.apache.hadoop.hbase.io.<a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io"><span class="typeNameLink">HeapSize</span></a>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">ExtendedCell</span></a> (also extends java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">ExtendedCell</span></a> (also extends org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a>)</li>
 </ul>
 </li>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Iterable</span></a>&lt;T&gt;
@@ -442,18 +438,18 @@
 <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/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 6351d9e..ba477de 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -212,11 +212,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.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/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/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/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/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/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/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index e15a09f..1b90d1c 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -229,12 +229,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/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/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/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</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/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/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</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/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/regionserver/ByteBufferChunkKeyValue.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ByteBufferChunkKeyValue.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ByteBufferChunkKeyValue.html
index fe99d7d..872c1ef 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ByteBufferChunkKeyValue.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ByteBufferChunkKeyValue.html
@@ -119,7 +119,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <hr>
 <br>
@@ -241,6 +241,13 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html"
 <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.htm
 l?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
 </ul>
 <ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.ExtendedCell">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a></code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">
 <!--   -->
 </a>
@@ -311,7 +318,8 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html"
  chunks as in case of MemstoreLAB</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>the chunk id if the cell is backed by fixed sized Chunks, else return -1</dd>
+<dd>the chunk id if the cell is backed by fixed sized Chunks, else return
+ <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#CELL_NOT_BASED_ON_CHUNK"><code>ExtendedCell.CELL_NOT_BASED_ON_CHUNK</code></a>; i.e. -1.</dd>
 </dl>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
index e2dd09e..44e7161 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.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":9,"i42":9,"i43":9,"i44":9,"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":9,"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,"i89":10,"i90":10,"i91":10,"i92":10,"i93":9,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":9,"i107":10,"i108":10,"i109":10
 ,"i110":10,"i111":10,"i112":10,"i113":41,"i114":41,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":10,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":10,"i130":10,"i131":10,"i132":10,"i133":10,"i134":10,"i135":10,"i136":10,"i137":10,"i138":10,"i139":9,"i140":10,"i141":10,"i142":10,"i143":10,"i144":10,"i145":10,"i146":10,"i147":10,"i148":42,"i149":10,"i150":10,"i151":10,"i152":10,"i153":10,"i154":10,"i155":10,"i156":10,"i157":10,"i158":10,"i159":10,"i160":10,"i161":10,"i162":10,"i163":10,"i164":10,"i165":10,"i166":10,"i167":10,"i168":10,"i169":10,"i170":9,"i171":10,"i172":10,"i173":10,"i174":10,"i175":10,"i176":10,"i177":10,"i178":10,"i179":9,"i180":10,"i181":10,"i182":9,"i183":9,"i184":9,"i185":9,"i186":9,"i187":9,"i188":9,"i189":9,"i190":9,"i191":9,"i192":10,"i193":10,"i194":10,"i195":10,"i196":10,"i197":10,"i198":10,"i199":10,"i200":10,"i201":9,"i202":10,"i203":10,"i204":10,"i205":10,"i206":10,"i207":10,"i208":10,"i209":10,"i210":10,
 "i211":10,"i212":10,"i213":10,"i214":10,"i215":10,"i216":10,"i217":10,"i218":10,"i219":10,"i220":10,"i221":10,"i222":10,"i223":10,"i224":10,"i225":10,"i226":10,"i227":10,"i228":10,"i229":10,"i230":10,"i231":10,"i232":9,"i233":9,"i234":10,"i235":10,"i236":10,"i237":10,"i238":10,"i239":10,"i240":10,"i241":10,"i242":10,"i243":10,"i244":10,"i245":9,"i246":10,"i247":10,"i248":10,"i249":10,"i250":10,"i251":10,"i252":10,"i253":10,"i254":10,"i255":10,"i256":10,"i257":10,"i258":10,"i259":9,"i260":10,"i261":10,"i262":10,"i263":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":9,"i42":9,"i43":9,"i44":9,"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":9,"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,"i89":10,"i90":10,"i91":10,"i92":10,"i93":9,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":9,"i107":10,"i108":10,"i109":10
 ,"i110":10,"i111":10,"i112":10,"i113":41,"i114":41,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":10,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":10,"i130":10,"i131":10,"i132":10,"i133":10,"i134":10,"i135":10,"i136":10,"i137":10,"i138":10,"i139":9,"i140":10,"i141":10,"i142":10,"i143":10,"i144":10,"i145":10,"i146":10,"i147":10,"i148":42,"i149":10,"i150":10,"i151":10,"i152":10,"i153":10,"i154":10,"i155":10,"i156":10,"i157":10,"i158":10,"i159":10,"i160":10,"i161":10,"i162":10,"i163":10,"i164":10,"i165":10,"i166":10,"i167":10,"i168":10,"i169":10,"i170":9,"i171":10,"i172":10,"i173":10,"i174":10,"i175":10,"i176":10,"i177":10,"i178":10,"i179":9,"i180":10,"i181":10,"i182":9,"i183":9,"i184":9,"i185":9,"i186":9,"i187":9,"i188":9,"i189":9,"i190":9,"i191":9,"i192":10,"i193":10,"i194":10,"i195":10,"i196":10,"i197":10,"i198":10,"i199":10,"i200":10,"i201":9,"i202":10,"i203":10,"i204":10,"i205":10,"i206":10,"i207":10,"i208":10,"i209":10,"i210":10,
 "i211":10,"i212":10,"i213":10,"i214":10,"i215":10,"i216":10,"i217":10,"i218":10,"i219":10,"i220":10,"i221":10,"i222":10,"i223":10,"i224":10,"i225":10,"i226":10,"i227":10,"i228":10,"i229":10,"i230":10,"i231":10,"i232":9,"i233":9,"i234":10,"i235":10,"i236":10,"i237":10,"i238":10,"i239":10,"i240":10,"i241":10,"i242":10,"i243":10,"i244":10,"i245":9,"i246":10,"i247":10,"i248":10,"i249":10,"i250":10,"i251":10,"i252":10,"i253":9,"i254":10,"i255":10,"i256":10,"i257":10,"i258":10,"i259":9,"i260":10,"i261":10,"i262":10,"i263":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";
@@ -2225,7 +2225,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#unblockUpdates--">unblockUpdates</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i253" class="rowColor">
-<td class="colFirst"><code>void</code></td>
+<td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#updateCellTimestamps-java.lang.Iterable-byte:A-">updateCellTimestamps</a></span>(<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="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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;&nbsp;cellItr,
                     byte[]&nbsp;now)</code>
 <div class="block">Replace any cell timestamps set to <a href="../../../../../org/apache/hadoop/hbase/HConstants.html#LATEST_TIMESTAMP"><code>HConstants.LATEST_TIMESTAMP</code></a>
@@ -5242,9 +5242,9 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>updateCellTimestamps</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4239">updateCellTimestamps</a>(<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="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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;&nbsp;cellItr,
-                                 byte[]&nbsp;now)
-                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4239">updateCellTimestamps</a>(<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="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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;&nbsp;cellItr,
+                                         byte[]&nbsp;now)
+                                  throws <a href="https://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">Replace any cell timestamps set to <a href="../../../../../org/apache/hadoop/hbase/HConstants.html#LATEST_TIMESTAMP"><code>HConstants.LATEST_TIMESTAMP</code></a>
  provided current timestamp.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
index 31c6fd0..1546b5d 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1695">HRegionServer.CompactionChecker</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1694">HRegionServer.CompactionChecker</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></pre>
 </li>
 </ul>
@@ -233,7 +233,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>instance</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1696">instance</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1695">instance</a></pre>
 </li>
 </ul>
 <a name="majorCompactPriority">
@@ -242,7 +242,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>majorCompactPriority</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1697">majorCompactPriority</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1696">majorCompactPriority</a></pre>
 </li>
 </ul>
 <a name="DEFAULT_PRIORITY">
@@ -251,7 +251,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_PRIORITY</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1698">DEFAULT_PRIORITY</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1697">DEFAULT_PRIORITY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.CompactionChecker.DEFAULT_PRIORITY">Constant Field Values</a></dd>
@@ -264,7 +264,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>iteration</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1701">iteration</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1700">iteration</a></pre>
 </li>
 </ul>
 </li>
@@ -281,7 +281,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CompactionChecker</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1703">CompactionChecker</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;h,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1702">CompactionChecker</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;h,
                   int&nbsp;sleepTime,
                   <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper)</pre>
 </li>
@@ -300,7 +300,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>chore</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1717">chore</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1716">chore</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore--">ScheduledChore</a></code></span></div>
 <div class="block">The task to execute on each scheduled execution of the Chore</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
index 332c004..c0f2727 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3387">HRegionServer.MovedRegionInfo</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3384">HRegionServer.MovedRegionInfo</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>
@@ -218,7 +218,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>serverName</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3388">serverName</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3385">serverName</a></pre>
 </li>
 </ul>
 <a name="seqNum">
@@ -227,7 +227,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>seqNum</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3389">seqNum</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3386">seqNum</a></pre>
 </li>
 </ul>
 <a name="ts">
@@ -236,7 +236,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ts</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3390">ts</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3387">ts</a></pre>
 </li>
 </ul>
 </li>
@@ -253,7 +253,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MovedRegionInfo</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3392">MovedRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3389">MovedRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                        long&nbsp;closeSeqNum)</pre>
 </li>
 </ul>
@@ -271,7 +271,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3398">getServerName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3395">getServerName</a>()</pre>
 </li>
 </ul>
 <a name="getSeqNum--">
@@ -280,7 +280,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getSeqNum</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3402">getSeqNum</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3399">getSeqNum</a>()</pre>
 </li>
 </ul>
 <a name="getMoveTime--">
@@ -289,7 +289,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getMoveTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3406">getMoveTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3403">getMoveTime</a>()</pre>
 </li>
 </ul>
 </li>


[28/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html
index 65b5edb..7f42212 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html
@@ -1413,7 +1413,7 @@
 <span class="sourceLineNo">1405</span>    ArrayListMultimap&lt;String, ServerName&gt; serversByHostname = ArrayListMultimap.create();<a name="line.1405"></a>
 <span class="sourceLineNo">1406</span>    for (ServerName server : servers) {<a name="line.1406"></a>
 <span class="sourceLineNo">1407</span>      assignments.put(server, new ArrayList&lt;&gt;());<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostname(), server);<a name="line.1408"></a>
+<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostnameLowerCase(), server);<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>    // Collection of the hostnames that used to have regions<a name="line.1411"></a>
@@ -1434,13 +1434,13 @@
 <span class="sourceLineNo">1426</span>      ServerName oldServerName = entry.getValue();<a name="line.1426"></a>
 <span class="sourceLineNo">1427</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1427"></a>
 <span class="sourceLineNo">1428</span>      if (oldServerName != null) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostname());<a name="line.1429"></a>
+<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1429"></a>
 <span class="sourceLineNo">1430</span>      }<a name="line.1430"></a>
 <span class="sourceLineNo">1431</span>      if (localServers.isEmpty()) {<a name="line.1431"></a>
 <span class="sourceLineNo">1432</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>        randomAssignRegions.add(region);<a name="line.1433"></a>
 <span class="sourceLineNo">1434</span>        if (oldServerName != null) {<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostname());<a name="line.1435"></a>
+<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1435"></a>
 <span class="sourceLineNo">1436</span>        }<a name="line.1436"></a>
 <span class="sourceLineNo">1437</span>      } else if (localServers.size() == 1) {<a name="line.1437"></a>
 <span class="sourceLineNo">1438</span>        // the usual case - one new server on same host<a name="line.1438"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html
index 65b5edb..7f42212 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html
@@ -1413,7 +1413,7 @@
 <span class="sourceLineNo">1405</span>    ArrayListMultimap&lt;String, ServerName&gt; serversByHostname = ArrayListMultimap.create();<a name="line.1405"></a>
 <span class="sourceLineNo">1406</span>    for (ServerName server : servers) {<a name="line.1406"></a>
 <span class="sourceLineNo">1407</span>      assignments.put(server, new ArrayList&lt;&gt;());<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostname(), server);<a name="line.1408"></a>
+<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostnameLowerCase(), server);<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>    // Collection of the hostnames that used to have regions<a name="line.1411"></a>
@@ -1434,13 +1434,13 @@
 <span class="sourceLineNo">1426</span>      ServerName oldServerName = entry.getValue();<a name="line.1426"></a>
 <span class="sourceLineNo">1427</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1427"></a>
 <span class="sourceLineNo">1428</span>      if (oldServerName != null) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostname());<a name="line.1429"></a>
+<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1429"></a>
 <span class="sourceLineNo">1430</span>      }<a name="line.1430"></a>
 <span class="sourceLineNo">1431</span>      if (localServers.isEmpty()) {<a name="line.1431"></a>
 <span class="sourceLineNo">1432</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>        randomAssignRegions.add(region);<a name="line.1433"></a>
 <span class="sourceLineNo">1434</span>        if (oldServerName != null) {<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostname());<a name="line.1435"></a>
+<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1435"></a>
 <span class="sourceLineNo">1436</span>        }<a name="line.1436"></a>
 <span class="sourceLineNo">1437</span>      } else if (localServers.size() == 1) {<a name="line.1437"></a>
 <span class="sourceLineNo">1438</span>        // the usual case - one new server on same host<a name="line.1438"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html
index 65b5edb..7f42212 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html
@@ -1413,7 +1413,7 @@
 <span class="sourceLineNo">1405</span>    ArrayListMultimap&lt;String, ServerName&gt; serversByHostname = ArrayListMultimap.create();<a name="line.1405"></a>
 <span class="sourceLineNo">1406</span>    for (ServerName server : servers) {<a name="line.1406"></a>
 <span class="sourceLineNo">1407</span>      assignments.put(server, new ArrayList&lt;&gt;());<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostname(), server);<a name="line.1408"></a>
+<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostnameLowerCase(), server);<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>    // Collection of the hostnames that used to have regions<a name="line.1411"></a>
@@ -1434,13 +1434,13 @@
 <span class="sourceLineNo">1426</span>      ServerName oldServerName = entry.getValue();<a name="line.1426"></a>
 <span class="sourceLineNo">1427</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1427"></a>
 <span class="sourceLineNo">1428</span>      if (oldServerName != null) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostname());<a name="line.1429"></a>
+<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1429"></a>
 <span class="sourceLineNo">1430</span>      }<a name="line.1430"></a>
 <span class="sourceLineNo">1431</span>      if (localServers.isEmpty()) {<a name="line.1431"></a>
 <span class="sourceLineNo">1432</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>        randomAssignRegions.add(region);<a name="line.1433"></a>
 <span class="sourceLineNo">1434</span>        if (oldServerName != null) {<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostname());<a name="line.1435"></a>
+<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1435"></a>
 <span class="sourceLineNo">1436</span>        }<a name="line.1436"></a>
 <span class="sourceLineNo">1437</span>      } else if (localServers.size() == 1) {<a name="line.1437"></a>
 <span class="sourceLineNo">1438</span>        // the usual case - one new server on same host<a name="line.1438"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html
index 65b5edb..7f42212 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html
@@ -1413,7 +1413,7 @@
 <span class="sourceLineNo">1405</span>    ArrayListMultimap&lt;String, ServerName&gt; serversByHostname = ArrayListMultimap.create();<a name="line.1405"></a>
 <span class="sourceLineNo">1406</span>    for (ServerName server : servers) {<a name="line.1406"></a>
 <span class="sourceLineNo">1407</span>      assignments.put(server, new ArrayList&lt;&gt;());<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostname(), server);<a name="line.1408"></a>
+<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostnameLowerCase(), server);<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>    // Collection of the hostnames that used to have regions<a name="line.1411"></a>
@@ -1434,13 +1434,13 @@
 <span class="sourceLineNo">1426</span>      ServerName oldServerName = entry.getValue();<a name="line.1426"></a>
 <span class="sourceLineNo">1427</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1427"></a>
 <span class="sourceLineNo">1428</span>      if (oldServerName != null) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostname());<a name="line.1429"></a>
+<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1429"></a>
 <span class="sourceLineNo">1430</span>      }<a name="line.1430"></a>
 <span class="sourceLineNo">1431</span>      if (localServers.isEmpty()) {<a name="line.1431"></a>
 <span class="sourceLineNo">1432</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>        randomAssignRegions.add(region);<a name="line.1433"></a>
 <span class="sourceLineNo">1434</span>        if (oldServerName != null) {<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostname());<a name="line.1435"></a>
+<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1435"></a>
 <span class="sourceLineNo">1436</span>        }<a name="line.1436"></a>
 <span class="sourceLineNo">1437</span>      } else if (localServers.size() == 1) {<a name="line.1437"></a>
 <span class="sourceLineNo">1438</span>        // the usual case - one new server on same host<a name="line.1438"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html
index 65b5edb..7f42212 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html
@@ -1413,7 +1413,7 @@
 <span class="sourceLineNo">1405</span>    ArrayListMultimap&lt;String, ServerName&gt; serversByHostname = ArrayListMultimap.create();<a name="line.1405"></a>
 <span class="sourceLineNo">1406</span>    for (ServerName server : servers) {<a name="line.1406"></a>
 <span class="sourceLineNo">1407</span>      assignments.put(server, new ArrayList&lt;&gt;());<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostname(), server);<a name="line.1408"></a>
+<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostnameLowerCase(), server);<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>    // Collection of the hostnames that used to have regions<a name="line.1411"></a>
@@ -1434,13 +1434,13 @@
 <span class="sourceLineNo">1426</span>      ServerName oldServerName = entry.getValue();<a name="line.1426"></a>
 <span class="sourceLineNo">1427</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1427"></a>
 <span class="sourceLineNo">1428</span>      if (oldServerName != null) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostname());<a name="line.1429"></a>
+<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1429"></a>
 <span class="sourceLineNo">1430</span>      }<a name="line.1430"></a>
 <span class="sourceLineNo">1431</span>      if (localServers.isEmpty()) {<a name="line.1431"></a>
 <span class="sourceLineNo">1432</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>        randomAssignRegions.add(region);<a name="line.1433"></a>
 <span class="sourceLineNo">1434</span>        if (oldServerName != null) {<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostname());<a name="line.1435"></a>
+<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1435"></a>
 <span class="sourceLineNo">1436</span>        }<a name="line.1436"></a>
 <span class="sourceLineNo">1437</span>      } else if (localServers.size() == 1) {<a name="line.1437"></a>
 <span class="sourceLineNo">1438</span>        // the usual case - one new server on same host<a name="line.1438"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/CellSet.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/CellSet.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/CellSet.html
index 3b38e55..6a62b71 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/CellSet.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/CellSet.html
@@ -61,7 +61,7 @@
 <span class="sourceLineNo">053</span>  private final int numUniqueKeys;<a name="line.53"></a>
 <span class="sourceLineNo">054</span><a name="line.54"></a>
 <span class="sourceLineNo">055</span>  CellSet(final CellComparator c) {<a name="line.55"></a>
-<span class="sourceLineNo">056</span>    this.delegatee = new ConcurrentSkipListMap&lt;&gt;(c);<a name="line.56"></a>
+<span class="sourceLineNo">056</span>    this.delegatee = new ConcurrentSkipListMap&lt;&gt;(c.getSimpleComparator());<a name="line.56"></a>
 <span class="sourceLineNo">057</span>    this.numUniqueKeys = UNKNOWN_NUM_UNIQUES;<a name="line.57"></a>
 <span class="sourceLineNo">058</span>  }<a name="line.58"></a>
 <span class="sourceLineNo">059</span><a name="line.59"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html
index d112942..21f7b0f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html
@@ -54,7 +54,7 @@
 <span class="sourceLineNo">046</span>@InterfaceAudience.Private<a name="line.46"></a>
 <span class="sourceLineNo">047</span>public class ChunkCreator {<a name="line.47"></a>
 <span class="sourceLineNo">048</span>  private static final Logger LOG = LoggerFactory.getLogger(ChunkCreator.class);<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  // monotonically increasing chunkid<a name="line.49"></a>
+<span class="sourceLineNo">049</span>  // monotonically increasing chunkid. Starts at 1.<a name="line.49"></a>
 <span class="sourceLineNo">050</span>  private AtomicInteger chunkID = new AtomicInteger(1);<a name="line.50"></a>
 <span class="sourceLineNo">051</span>  // maps the chunk against the monotonically increasing chunk id. We need to preserve the<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  // natural ordering of the key<a name="line.52"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html
index d112942..21f7b0f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.StatisticsThread.html
@@ -54,7 +54,7 @@
 <span class="sourceLineNo">046</span>@InterfaceAudience.Private<a name="line.46"></a>
 <span class="sourceLineNo">047</span>public class ChunkCreator {<a name="line.47"></a>
 <span class="sourceLineNo">048</span>  private static final Logger LOG = LoggerFactory.getLogger(ChunkCreator.class);<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  // monotonically increasing chunkid<a name="line.49"></a>
+<span class="sourceLineNo">049</span>  // monotonically increasing chunkid. Starts at 1.<a name="line.49"></a>
 <span class="sourceLineNo">050</span>  private AtomicInteger chunkID = new AtomicInteger(1);<a name="line.50"></a>
 <span class="sourceLineNo">051</span>  // maps the chunk against the monotonically increasing chunk id. We need to preserve the<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  // natural ordering of the key<a name="line.52"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html
index d112942..21f7b0f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.MemStoreChunkPool.html
@@ -54,7 +54,7 @@
 <span class="sourceLineNo">046</span>@InterfaceAudience.Private<a name="line.46"></a>
 <span class="sourceLineNo">047</span>public class ChunkCreator {<a name="line.47"></a>
 <span class="sourceLineNo">048</span>  private static final Logger LOG = LoggerFactory.getLogger(ChunkCreator.class);<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  // monotonically increasing chunkid<a name="line.49"></a>
+<span class="sourceLineNo">049</span>  // monotonically increasing chunkid. Starts at 1.<a name="line.49"></a>
 <span class="sourceLineNo">050</span>  private AtomicInteger chunkID = new AtomicInteger(1);<a name="line.50"></a>
 <span class="sourceLineNo">051</span>  // maps the chunk against the monotonically increasing chunk id. We need to preserve the<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  // natural ordering of the key<a name="line.52"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html
index d112942..21f7b0f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChunkCreator.html
@@ -54,7 +54,7 @@
 <span class="sourceLineNo">046</span>@InterfaceAudience.Private<a name="line.46"></a>
 <span class="sourceLineNo">047</span>public class ChunkCreator {<a name="line.47"></a>
 <span class="sourceLineNo">048</span>  private static final Logger LOG = LoggerFactory.getLogger(ChunkCreator.class);<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  // monotonically increasing chunkid<a name="line.49"></a>
+<span class="sourceLineNo">049</span>  // monotonically increasing chunkid. Starts at 1.<a name="line.49"></a>
 <span class="sourceLineNo">050</span>  private AtomicInteger chunkID = new AtomicInteger(1);<a name="line.50"></a>
 <span class="sourceLineNo">051</span>  // maps the chunk against the monotonically increasing chunk id. We need to preserve the<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  // natural ordering of the key<a name="line.52"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html
index 7d27402..3da432b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html
@@ -2560,8 +2560,8 @@
 <span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>    MemStoreSize mss = this.memStoreSizing.getMemStoreSize();<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>    LOG.info("Flushing " + + storesToFlush.size() + "/" + stores.size() + " column families," +<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        " memstore data size=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        " memstore heap size=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
+<span class="sourceLineNo">2555</span>        " dataSize=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>        " heapSize=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>        ((perCfExtras != null &amp;&amp; perCfExtras.length() &gt; 0)? perCfExtras.toString(): "") +<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>        ((wal != null) ? "" : "; WAL is null, using passed sequenceid=" + sequenceId));<a name="line.2558"></a>
 <span class="sourceLineNo">2559</span>  }<a name="line.2559"></a>
@@ -2761,10 +2761,10 @@
 <span class="sourceLineNo">2753</span>    long time = EnvironmentEdgeManager.currentTime() - startTime;<a name="line.2753"></a>
 <span class="sourceLineNo">2754</span>    MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2754"></a>
 <span class="sourceLineNo">2755</span>    long memstoresize = this.memStoreSizing.getMemStoreSize().getDataSize();<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    String msg = "Finished memstore flush;"<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        + " data size ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        + ", heap size ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        + ", currentsize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
+<span class="sourceLineNo">2756</span>    String msg = "Finished flush of"<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        + " dataSize ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>        + ", heapSize ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>        + ", currentSize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>        + " for " + this.getRegionInfo().getEncodedName() + " in " + time + "ms, sequenceid="<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span>        + flushOpSeqId +  ", compaction requested=" + compactionRequested<a name="line.2761"></a>
 <span class="sourceLineNo">2762</span>        + ((wal == null) ? "; wal=null" : "");<a name="line.2762"></a>
@@ -4244,7 +4244,7 @@
 <span class="sourceLineNo">4236</span>   * @param cellItr<a name="line.4236"></a>
 <span class="sourceLineNo">4237</span>   * @param now<a name="line.4237"></a>
 <span class="sourceLineNo">4238</span>   */<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>  public void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
+<span class="sourceLineNo">4239</span>  private static void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
 <span class="sourceLineNo">4240</span>      throws IOException {<a name="line.4240"></a>
 <span class="sourceLineNo">4241</span>    for (List&lt;Cell&gt; cells: cellItr) {<a name="line.4241"></a>
 <span class="sourceLineNo">4242</span>      if (cells == null) continue;<a name="line.4242"></a>
@@ -4299,12 +4299,12 @@
 <span class="sourceLineNo">4291</span>      requestFlush();<a name="line.4291"></a>
 <span class="sourceLineNo">4292</span>      // Don't print current limit because it will vary too much. The message is used as a key<a name="line.4292"></a>
 <span class="sourceLineNo">4293</span>      // over in RetriesExhaustedWithDetailsException processing.<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit; regionName=" +<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span>          ", server=" + (this.getRegionServerServices() == null ? "unknown":<a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>          this.getRegionServerServices().getServerName()) +<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>          ", blockingMemStoreSize=" +<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>          org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(blockingMemStoreSize));<a name="line.4299"></a>
+<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit=" +<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>        org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(this.blockingMemStoreSize) +<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>        ", regionName=" +<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>          ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>              this.getRegionServerServices().getServerName()));<a name="line.4299"></a>
 <span class="sourceLineNo">4300</span>    }<a name="line.4300"></a>
 <span class="sourceLineNo">4301</span>  }<a name="line.4301"></a>
 <span class="sourceLineNo">4302</span><a name="line.4302"></a>
@@ -8610,7 +8610,8 @@
 <span class="sourceLineNo">8602</span>  public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8602"></a>
 <span class="sourceLineNo">8603</span>    requestFlush0(tracker);<a name="line.8603"></a>
 <span class="sourceLineNo">8604</span>  }<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span>}<a name="line.8605"></a>
+<span class="sourceLineNo">8605</span><a name="line.8605"></a>
+<span class="sourceLineNo">8606</span>}<a name="line.8606"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
index 7d27402..3da432b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
@@ -2560,8 +2560,8 @@
 <span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>    MemStoreSize mss = this.memStoreSizing.getMemStoreSize();<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>    LOG.info("Flushing " + + storesToFlush.size() + "/" + stores.size() + " column families," +<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        " memstore data size=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        " memstore heap size=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
+<span class="sourceLineNo">2555</span>        " dataSize=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>        " heapSize=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>        ((perCfExtras != null &amp;&amp; perCfExtras.length() &gt; 0)? perCfExtras.toString(): "") +<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>        ((wal != null) ? "" : "; WAL is null, using passed sequenceid=" + sequenceId));<a name="line.2558"></a>
 <span class="sourceLineNo">2559</span>  }<a name="line.2559"></a>
@@ -2761,10 +2761,10 @@
 <span class="sourceLineNo">2753</span>    long time = EnvironmentEdgeManager.currentTime() - startTime;<a name="line.2753"></a>
 <span class="sourceLineNo">2754</span>    MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2754"></a>
 <span class="sourceLineNo">2755</span>    long memstoresize = this.memStoreSizing.getMemStoreSize().getDataSize();<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    String msg = "Finished memstore flush;"<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        + " data size ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        + ", heap size ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        + ", currentsize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
+<span class="sourceLineNo">2756</span>    String msg = "Finished flush of"<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        + " dataSize ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>        + ", heapSize ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>        + ", currentSize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>        + " for " + this.getRegionInfo().getEncodedName() + " in " + time + "ms, sequenceid="<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span>        + flushOpSeqId +  ", compaction requested=" + compactionRequested<a name="line.2761"></a>
 <span class="sourceLineNo">2762</span>        + ((wal == null) ? "; wal=null" : "");<a name="line.2762"></a>
@@ -4244,7 +4244,7 @@
 <span class="sourceLineNo">4236</span>   * @param cellItr<a name="line.4236"></a>
 <span class="sourceLineNo">4237</span>   * @param now<a name="line.4237"></a>
 <span class="sourceLineNo">4238</span>   */<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>  public void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
+<span class="sourceLineNo">4239</span>  private static void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
 <span class="sourceLineNo">4240</span>      throws IOException {<a name="line.4240"></a>
 <span class="sourceLineNo">4241</span>    for (List&lt;Cell&gt; cells: cellItr) {<a name="line.4241"></a>
 <span class="sourceLineNo">4242</span>      if (cells == null) continue;<a name="line.4242"></a>
@@ -4299,12 +4299,12 @@
 <span class="sourceLineNo">4291</span>      requestFlush();<a name="line.4291"></a>
 <span class="sourceLineNo">4292</span>      // Don't print current limit because it will vary too much. The message is used as a key<a name="line.4292"></a>
 <span class="sourceLineNo">4293</span>      // over in RetriesExhaustedWithDetailsException processing.<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit; regionName=" +<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span>          ", server=" + (this.getRegionServerServices() == null ? "unknown":<a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>          this.getRegionServerServices().getServerName()) +<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>          ", blockingMemStoreSize=" +<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>          org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(blockingMemStoreSize));<a name="line.4299"></a>
+<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit=" +<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>        org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(this.blockingMemStoreSize) +<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>        ", regionName=" +<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>          ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>              this.getRegionServerServices().getServerName()));<a name="line.4299"></a>
 <span class="sourceLineNo">4300</span>    }<a name="line.4300"></a>
 <span class="sourceLineNo">4301</span>  }<a name="line.4301"></a>
 <span class="sourceLineNo">4302</span><a name="line.4302"></a>
@@ -8610,7 +8610,8 @@
 <span class="sourceLineNo">8602</span>  public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8602"></a>
 <span class="sourceLineNo">8603</span>    requestFlush0(tracker);<a name="line.8603"></a>
 <span class="sourceLineNo">8604</span>  }<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span>}<a name="line.8605"></a>
+<span class="sourceLineNo">8605</span><a name="line.8605"></a>
+<span class="sourceLineNo">8606</span>}<a name="line.8606"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html
index 7d27402..3da432b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html
@@ -2560,8 +2560,8 @@
 <span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>    MemStoreSize mss = this.memStoreSizing.getMemStoreSize();<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>    LOG.info("Flushing " + + storesToFlush.size() + "/" + stores.size() + " column families," +<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        " memstore data size=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        " memstore heap size=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
+<span class="sourceLineNo">2555</span>        " dataSize=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>        " heapSize=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>        ((perCfExtras != null &amp;&amp; perCfExtras.length() &gt; 0)? perCfExtras.toString(): "") +<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>        ((wal != null) ? "" : "; WAL is null, using passed sequenceid=" + sequenceId));<a name="line.2558"></a>
 <span class="sourceLineNo">2559</span>  }<a name="line.2559"></a>
@@ -2761,10 +2761,10 @@
 <span class="sourceLineNo">2753</span>    long time = EnvironmentEdgeManager.currentTime() - startTime;<a name="line.2753"></a>
 <span class="sourceLineNo">2754</span>    MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2754"></a>
 <span class="sourceLineNo">2755</span>    long memstoresize = this.memStoreSizing.getMemStoreSize().getDataSize();<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    String msg = "Finished memstore flush;"<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        + " data size ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        + ", heap size ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        + ", currentsize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
+<span class="sourceLineNo">2756</span>    String msg = "Finished flush of"<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        + " dataSize ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>        + ", heapSize ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>        + ", currentSize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>        + " for " + this.getRegionInfo().getEncodedName() + " in " + time + "ms, sequenceid="<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span>        + flushOpSeqId +  ", compaction requested=" + compactionRequested<a name="line.2761"></a>
 <span class="sourceLineNo">2762</span>        + ((wal == null) ? "; wal=null" : "");<a name="line.2762"></a>
@@ -4244,7 +4244,7 @@
 <span class="sourceLineNo">4236</span>   * @param cellItr<a name="line.4236"></a>
 <span class="sourceLineNo">4237</span>   * @param now<a name="line.4237"></a>
 <span class="sourceLineNo">4238</span>   */<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>  public void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
+<span class="sourceLineNo">4239</span>  private static void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
 <span class="sourceLineNo">4240</span>      throws IOException {<a name="line.4240"></a>
 <span class="sourceLineNo">4241</span>    for (List&lt;Cell&gt; cells: cellItr) {<a name="line.4241"></a>
 <span class="sourceLineNo">4242</span>      if (cells == null) continue;<a name="line.4242"></a>
@@ -4299,12 +4299,12 @@
 <span class="sourceLineNo">4291</span>      requestFlush();<a name="line.4291"></a>
 <span class="sourceLineNo">4292</span>      // Don't print current limit because it will vary too much. The message is used as a key<a name="line.4292"></a>
 <span class="sourceLineNo">4293</span>      // over in RetriesExhaustedWithDetailsException processing.<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit; regionName=" +<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span>          ", server=" + (this.getRegionServerServices() == null ? "unknown":<a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>          this.getRegionServerServices().getServerName()) +<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>          ", blockingMemStoreSize=" +<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>          org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(blockingMemStoreSize));<a name="line.4299"></a>
+<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit=" +<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>        org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(this.blockingMemStoreSize) +<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>        ", regionName=" +<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>          ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>              this.getRegionServerServices().getServerName()));<a name="line.4299"></a>
 <span class="sourceLineNo">4300</span>    }<a name="line.4300"></a>
 <span class="sourceLineNo">4301</span>  }<a name="line.4301"></a>
 <span class="sourceLineNo">4302</span><a name="line.4302"></a>
@@ -8610,7 +8610,8 @@
 <span class="sourceLineNo">8602</span>  public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8602"></a>
 <span class="sourceLineNo">8603</span>    requestFlush0(tracker);<a name="line.8603"></a>
 <span class="sourceLineNo">8604</span>  }<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span>}<a name="line.8605"></a>
+<span class="sourceLineNo">8605</span><a name="line.8605"></a>
+<span class="sourceLineNo">8606</span>}<a name="line.8606"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html
index 7d27402..3da432b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html
@@ -2560,8 +2560,8 @@
 <span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>    MemStoreSize mss = this.memStoreSizing.getMemStoreSize();<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>    LOG.info("Flushing " + + storesToFlush.size() + "/" + stores.size() + " column families," +<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        " memstore data size=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        " memstore heap size=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
+<span class="sourceLineNo">2555</span>        " dataSize=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>        " heapSize=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>        ((perCfExtras != null &amp;&amp; perCfExtras.length() &gt; 0)? perCfExtras.toString(): "") +<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>        ((wal != null) ? "" : "; WAL is null, using passed sequenceid=" + sequenceId));<a name="line.2558"></a>
 <span class="sourceLineNo">2559</span>  }<a name="line.2559"></a>
@@ -2761,10 +2761,10 @@
 <span class="sourceLineNo">2753</span>    long time = EnvironmentEdgeManager.currentTime() - startTime;<a name="line.2753"></a>
 <span class="sourceLineNo">2754</span>    MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2754"></a>
 <span class="sourceLineNo">2755</span>    long memstoresize = this.memStoreSizing.getMemStoreSize().getDataSize();<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    String msg = "Finished memstore flush;"<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        + " data size ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        + ", heap size ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        + ", currentsize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
+<span class="sourceLineNo">2756</span>    String msg = "Finished flush of"<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        + " dataSize ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>        + ", heapSize ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>        + ", currentSize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>        + " for " + this.getRegionInfo().getEncodedName() + " in " + time + "ms, sequenceid="<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span>        + flushOpSeqId +  ", compaction requested=" + compactionRequested<a name="line.2761"></a>
 <span class="sourceLineNo">2762</span>        + ((wal == null) ? "; wal=null" : "");<a name="line.2762"></a>
@@ -4244,7 +4244,7 @@
 <span class="sourceLineNo">4236</span>   * @param cellItr<a name="line.4236"></a>
 <span class="sourceLineNo">4237</span>   * @param now<a name="line.4237"></a>
 <span class="sourceLineNo">4238</span>   */<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>  public void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
+<span class="sourceLineNo">4239</span>  private static void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
 <span class="sourceLineNo">4240</span>      throws IOException {<a name="line.4240"></a>
 <span class="sourceLineNo">4241</span>    for (List&lt;Cell&gt; cells: cellItr) {<a name="line.4241"></a>
 <span class="sourceLineNo">4242</span>      if (cells == null) continue;<a name="line.4242"></a>
@@ -4299,12 +4299,12 @@
 <span class="sourceLineNo">4291</span>      requestFlush();<a name="line.4291"></a>
 <span class="sourceLineNo">4292</span>      // Don't print current limit because it will vary too much. The message is used as a key<a name="line.4292"></a>
 <span class="sourceLineNo">4293</span>      // over in RetriesExhaustedWithDetailsException processing.<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit; regionName=" +<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span>          ", server=" + (this.getRegionServerServices() == null ? "unknown":<a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>          this.getRegionServerServices().getServerName()) +<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>          ", blockingMemStoreSize=" +<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>          org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(blockingMemStoreSize));<a name="line.4299"></a>
+<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit=" +<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>        org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(this.blockingMemStoreSize) +<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>        ", regionName=" +<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>          ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>              this.getRegionServerServices().getServerName()));<a name="line.4299"></a>
 <span class="sourceLineNo">4300</span>    }<a name="line.4300"></a>
 <span class="sourceLineNo">4301</span>  }<a name="line.4301"></a>
 <span class="sourceLineNo">4302</span><a name="line.4302"></a>
@@ -8610,7 +8610,8 @@
 <span class="sourceLineNo">8602</span>  public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8602"></a>
 <span class="sourceLineNo">8603</span>    requestFlush0(tracker);<a name="line.8603"></a>
 <span class="sourceLineNo">8604</span>  }<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span>}<a name="line.8605"></a>
+<span class="sourceLineNo">8605</span><a name="line.8605"></a>
+<span class="sourceLineNo">8606</span>}<a name="line.8606"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html
index 7d27402..3da432b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html
@@ -2560,8 +2560,8 @@
 <span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>    MemStoreSize mss = this.memStoreSizing.getMemStoreSize();<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>    LOG.info("Flushing " + + storesToFlush.size() + "/" + stores.size() + " column families," +<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        " memstore data size=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        " memstore heap size=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
+<span class="sourceLineNo">2555</span>        " dataSize=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>        " heapSize=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>        ((perCfExtras != null &amp;&amp; perCfExtras.length() &gt; 0)? perCfExtras.toString(): "") +<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>        ((wal != null) ? "" : "; WAL is null, using passed sequenceid=" + sequenceId));<a name="line.2558"></a>
 <span class="sourceLineNo">2559</span>  }<a name="line.2559"></a>
@@ -2761,10 +2761,10 @@
 <span class="sourceLineNo">2753</span>    long time = EnvironmentEdgeManager.currentTime() - startTime;<a name="line.2753"></a>
 <span class="sourceLineNo">2754</span>    MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2754"></a>
 <span class="sourceLineNo">2755</span>    long memstoresize = this.memStoreSizing.getMemStoreSize().getDataSize();<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    String msg = "Finished memstore flush;"<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        + " data size ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        + ", heap size ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        + ", currentsize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
+<span class="sourceLineNo">2756</span>    String msg = "Finished flush of"<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        + " dataSize ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>        + ", heapSize ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>        + ", currentSize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>        + " for " + this.getRegionInfo().getEncodedName() + " in " + time + "ms, sequenceid="<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span>        + flushOpSeqId +  ", compaction requested=" + compactionRequested<a name="line.2761"></a>
 <span class="sourceLineNo">2762</span>        + ((wal == null) ? "; wal=null" : "");<a name="line.2762"></a>
@@ -4244,7 +4244,7 @@
 <span class="sourceLineNo">4236</span>   * @param cellItr<a name="line.4236"></a>
 <span class="sourceLineNo">4237</span>   * @param now<a name="line.4237"></a>
 <span class="sourceLineNo">4238</span>   */<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>  public void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
+<span class="sourceLineNo">4239</span>  private static void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
 <span class="sourceLineNo">4240</span>      throws IOException {<a name="line.4240"></a>
 <span class="sourceLineNo">4241</span>    for (List&lt;Cell&gt; cells: cellItr) {<a name="line.4241"></a>
 <span class="sourceLineNo">4242</span>      if (cells == null) continue;<a name="line.4242"></a>
@@ -4299,12 +4299,12 @@
 <span class="sourceLineNo">4291</span>      requestFlush();<a name="line.4291"></a>
 <span class="sourceLineNo">4292</span>      // Don't print current limit because it will vary too much. The message is used as a key<a name="line.4292"></a>
 <span class="sourceLineNo">4293</span>      // over in RetriesExhaustedWithDetailsException processing.<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit; regionName=" +<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span>          ", server=" + (this.getRegionServerServices() == null ? "unknown":<a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>          this.getRegionServerServices().getServerName()) +<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>          ", blockingMemStoreSize=" +<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>          org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(blockingMemStoreSize));<a name="line.4299"></a>
+<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit=" +<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>        org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(this.blockingMemStoreSize) +<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>        ", regionName=" +<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>          ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>              this.getRegionServerServices().getServerName()));<a name="line.4299"></a>
 <span class="sourceLineNo">4300</span>    }<a name="line.4300"></a>
 <span class="sourceLineNo">4301</span>  }<a name="line.4301"></a>
 <span class="sourceLineNo">4302</span><a name="line.4302"></a>
@@ -8610,7 +8610,8 @@
 <span class="sourceLineNo">8602</span>  public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8602"></a>
 <span class="sourceLineNo">8603</span>    requestFlush0(tracker);<a name="line.8603"></a>
 <span class="sourceLineNo">8604</span>  }<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span>}<a name="line.8605"></a>
+<span class="sourceLineNo">8605</span><a name="line.8605"></a>
+<span class="sourceLineNo">8606</span>}<a name="line.8606"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html
index 7d27402..3da432b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html
@@ -2560,8 +2560,8 @@
 <span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>    MemStoreSize mss = this.memStoreSizing.getMemStoreSize();<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>    LOG.info("Flushing " + + storesToFlush.size() + "/" + stores.size() + " column families," +<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        " memstore data size=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        " memstore heap size=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
+<span class="sourceLineNo">2555</span>        " dataSize=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>        " heapSize=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>        ((perCfExtras != null &amp;&amp; perCfExtras.length() &gt; 0)? perCfExtras.toString(): "") +<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>        ((wal != null) ? "" : "; WAL is null, using passed sequenceid=" + sequenceId));<a name="line.2558"></a>
 <span class="sourceLineNo">2559</span>  }<a name="line.2559"></a>
@@ -2761,10 +2761,10 @@
 <span class="sourceLineNo">2753</span>    long time = EnvironmentEdgeManager.currentTime() - startTime;<a name="line.2753"></a>
 <span class="sourceLineNo">2754</span>    MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2754"></a>
 <span class="sourceLineNo">2755</span>    long memstoresize = this.memStoreSizing.getMemStoreSize().getDataSize();<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    String msg = "Finished memstore flush;"<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        + " data size ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        + ", heap size ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        + ", currentsize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
+<span class="sourceLineNo">2756</span>    String msg = "Finished flush of"<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        + " dataSize ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>        + ", heapSize ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>        + ", currentSize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>        + " for " + this.getRegionInfo().getEncodedName() + " in " + time + "ms, sequenceid="<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span>        + flushOpSeqId +  ", compaction requested=" + compactionRequested<a name="line.2761"></a>
 <span class="sourceLineNo">2762</span>        + ((wal == null) ? "; wal=null" : "");<a name="line.2762"></a>
@@ -4244,7 +4244,7 @@
 <span class="sourceLineNo">4236</span>   * @param cellItr<a name="line.4236"></a>
 <span class="sourceLineNo">4237</span>   * @param now<a name="line.4237"></a>
 <span class="sourceLineNo">4238</span>   */<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>  public void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
+<span class="sourceLineNo">4239</span>  private static void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
 <span class="sourceLineNo">4240</span>      throws IOException {<a name="line.4240"></a>
 <span class="sourceLineNo">4241</span>    for (List&lt;Cell&gt; cells: cellItr) {<a name="line.4241"></a>
 <span class="sourceLineNo">4242</span>      if (cells == null) continue;<a name="line.4242"></a>
@@ -4299,12 +4299,12 @@
 <span class="sourceLineNo">4291</span>      requestFlush();<a name="line.4291"></a>
 <span class="sourceLineNo">4292</span>      // Don't print current limit because it will vary too much. The message is used as a key<a name="line.4292"></a>
 <span class="sourceLineNo">4293</span>      // over in RetriesExhaustedWithDetailsException processing.<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit; regionName=" +<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span>          ", server=" + (this.getRegionServerServices() == null ? "unknown":<a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>          this.getRegionServerServices().getServerName()) +<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>          ", blockingMemStoreSize=" +<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>          org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(blockingMemStoreSize));<a name="line.4299"></a>
+<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit=" +<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>        org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(this.blockingMemStoreSize) +<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>        ", regionName=" +<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>          ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>              this.getRegionServerServices().getServerName()));<a name="line.4299"></a>
 <span class="sourceLineNo">4300</span>    }<a name="line.4300"></a>
 <span class="sourceLineNo">4301</span>  }<a name="line.4301"></a>
 <span class="sourceLineNo">4302</span><a name="line.4302"></a>
@@ -8610,7 +8610,8 @@
 <span class="sourceLineNo">8602</span>  public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8602"></a>
 <span class="sourceLineNo">8603</span>    requestFlush0(tracker);<a name="line.8603"></a>
 <span class="sourceLineNo">8604</span>  }<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span>}<a name="line.8605"></a>
+<span class="sourceLineNo">8605</span><a name="line.8605"></a>
+<span class="sourceLineNo">8606</span>}<a name="line.8606"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html
index 7d27402..3da432b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html
@@ -2560,8 +2560,8 @@
 <span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>    MemStoreSize mss = this.memStoreSizing.getMemStoreSize();<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>    LOG.info("Flushing " + + storesToFlush.size() + "/" + stores.size() + " column families," +<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        " memstore data size=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        " memstore heap size=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
+<span class="sourceLineNo">2555</span>        " dataSize=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>        " heapSize=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>        ((perCfExtras != null &amp;&amp; perCfExtras.length() &gt; 0)? perCfExtras.toString(): "") +<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>        ((wal != null) ? "" : "; WAL is null, using passed sequenceid=" + sequenceId));<a name="line.2558"></a>
 <span class="sourceLineNo">2559</span>  }<a name="line.2559"></a>
@@ -2761,10 +2761,10 @@
 <span class="sourceLineNo">2753</span>    long time = EnvironmentEdgeManager.currentTime() - startTime;<a name="line.2753"></a>
 <span class="sourceLineNo">2754</span>    MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2754"></a>
 <span class="sourceLineNo">2755</span>    long memstoresize = this.memStoreSizing.getMemStoreSize().getDataSize();<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    String msg = "Finished memstore flush;"<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        + " data size ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        + ", heap size ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        + ", currentsize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
+<span class="sourceLineNo">2756</span>    String msg = "Finished flush of"<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        + " dataSize ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>        + ", heapSize ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>        + ", currentSize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>        + " for " + this.getRegionInfo().getEncodedName() + " in " + time + "ms, sequenceid="<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span>        + flushOpSeqId +  ", compaction requested=" + compactionRequested<a name="line.2761"></a>
 <span class="sourceLineNo">2762</span>        + ((wal == null) ? "; wal=null" : "");<a name="line.2762"></a>
@@ -4244,7 +4244,7 @@
 <span class="sourceLineNo">4236</span>   * @param cellItr<a name="line.4236"></a>
 <span class="sourceLineNo">4237</span>   * @param now<a name="line.4237"></a>
 <span class="sourceLineNo">4238</span>   */<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>  public void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
+<span class="sourceLineNo">4239</span>  private static void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
 <span class="sourceLineNo">4240</span>      throws IOException {<a name="line.4240"></a>
 <span class="sourceLineNo">4241</span>    for (List&lt;Cell&gt; cells: cellItr) {<a name="line.4241"></a>
 <span class="sourceLineNo">4242</span>      if (cells == null) continue;<a name="line.4242"></a>
@@ -4299,12 +4299,12 @@
 <span class="sourceLineNo">4291</span>      requestFlush();<a name="line.4291"></a>
 <span class="sourceLineNo">4292</span>      // Don't print current limit because it will vary too much. The message is used as a key<a name="line.4292"></a>
 <span class="sourceLineNo">4293</span>      // over in RetriesExhaustedWithDetailsException processing.<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit; regionName=" +<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span>          ", server=" + (this.getRegionServerServices() == null ? "unknown":<a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>          this.getRegionServerServices().getServerName()) +<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>          ", blockingMemStoreSize=" +<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>          org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(blockingMemStoreSize));<a name="line.4299"></a>
+<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit=" +<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>        org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(this.blockingMemStoreSize) +<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>        ", regionName=" +<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>          ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>              this.getRegionServerServices().getServerName()));<a name="line.4299"></a>
 <span class="sourceLineNo">4300</span>    }<a name="line.4300"></a>
 <span class="sourceLineNo">4301</span>  }<a name="line.4301"></a>
 <span class="sourceLineNo">4302</span><a name="line.4302"></a>
@@ -8610,7 +8610,8 @@
 <span class="sourceLineNo">8602</span>  public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8602"></a>
 <span class="sourceLineNo">8603</span>    requestFlush0(tracker);<a name="line.8603"></a>
 <span class="sourceLineNo">8604</span>  }<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span>}<a name="line.8605"></a>
+<span class="sourceLineNo">8605</span><a name="line.8605"></a>
+<span class="sourceLineNo">8606</span>}<a name="line.8606"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ObservedExceptionsInBatch.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ObservedExceptionsInBatch.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ObservedExceptionsInBatch.html
index 7d27402..3da432b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ObservedExceptionsInBatch.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ObservedExceptionsInBatch.html
@@ -2560,8 +2560,8 @@
 <span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
 <span class="sourceLineNo">2553</span>    MemStoreSize mss = this.memStoreSizing.getMemStoreSize();<a name="line.2553"></a>
 <span class="sourceLineNo">2554</span>    LOG.info("Flushing " + + storesToFlush.size() + "/" + stores.size() + " column families," +<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        " memstore data size=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        " memstore heap size=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
+<span class="sourceLineNo">2555</span>        " dataSize=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>        " heapSize=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2556"></a>
 <span class="sourceLineNo">2557</span>        ((perCfExtras != null &amp;&amp; perCfExtras.length() &gt; 0)? perCfExtras.toString(): "") +<a name="line.2557"></a>
 <span class="sourceLineNo">2558</span>        ((wal != null) ? "" : "; WAL is null, using passed sequenceid=" + sequenceId));<a name="line.2558"></a>
 <span class="sourceLineNo">2559</span>  }<a name="line.2559"></a>
@@ -2761,10 +2761,10 @@
 <span class="sourceLineNo">2753</span>    long time = EnvironmentEdgeManager.currentTime() - startTime;<a name="line.2753"></a>
 <span class="sourceLineNo">2754</span>    MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2754"></a>
 <span class="sourceLineNo">2755</span>    long memstoresize = this.memStoreSizing.getMemStoreSize().getDataSize();<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    String msg = "Finished memstore flush;"<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        + " data size ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        + ", heap size ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>        + ", currentsize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
+<span class="sourceLineNo">2756</span>    String msg = "Finished flush of"<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        + " dataSize ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>        + ", heapSize ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>        + ", currentSize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>        + " for " + this.getRegionInfo().getEncodedName() + " in " + time + "ms, sequenceid="<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span>        + flushOpSeqId +  ", compaction requested=" + compactionRequested<a name="line.2761"></a>
 <span class="sourceLineNo">2762</span>        + ((wal == null) ? "; wal=null" : "");<a name="line.2762"></a>
@@ -4244,7 +4244,7 @@
 <span class="sourceLineNo">4236</span>   * @param cellItr<a name="line.4236"></a>
 <span class="sourceLineNo">4237</span>   * @param now<a name="line.4237"></a>
 <span class="sourceLineNo">4238</span>   */<a name="line.4238"></a>
-<span class="sourceLineNo">4239</span>  public void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
+<span class="sourceLineNo">4239</span>  private static void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; cellItr, final byte[] now)<a name="line.4239"></a>
 <span class="sourceLineNo">4240</span>      throws IOException {<a name="line.4240"></a>
 <span class="sourceLineNo">4241</span>    for (List&lt;Cell&gt; cells: cellItr) {<a name="line.4241"></a>
 <span class="sourceLineNo">4242</span>      if (cells == null) continue;<a name="line.4242"></a>
@@ -4299,12 +4299,12 @@
 <span class="sourceLineNo">4291</span>      requestFlush();<a name="line.4291"></a>
 <span class="sourceLineNo">4292</span>      // Don't print current limit because it will vary too much. The message is used as a key<a name="line.4292"></a>
 <span class="sourceLineNo">4293</span>      // over in RetriesExhaustedWithDetailsException processing.<a name="line.4293"></a>
-<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit; regionName=" +<a name="line.4294"></a>
-<span class="sourceLineNo">4295</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4295"></a>
-<span class="sourceLineNo">4296</span>          ", server=" + (this.getRegionServerServices() == null ? "unknown":<a name="line.4296"></a>
-<span class="sourceLineNo">4297</span>          this.getRegionServerServices().getServerName()) +<a name="line.4297"></a>
-<span class="sourceLineNo">4298</span>          ", blockingMemStoreSize=" +<a name="line.4298"></a>
-<span class="sourceLineNo">4299</span>          org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(blockingMemStoreSize));<a name="line.4299"></a>
+<span class="sourceLineNo">4294</span>      throw new RegionTooBusyException("Over memstore limit=" +<a name="line.4294"></a>
+<span class="sourceLineNo">4295</span>        org.apache.hadoop.hbase.procedure2.util.StringUtils.humanSize(this.blockingMemStoreSize) +<a name="line.4295"></a>
+<span class="sourceLineNo">4296</span>        ", regionName=" +<a name="line.4296"></a>
+<span class="sourceLineNo">4297</span>          (this.getRegionInfo() == null? "unknown": this.getRegionInfo().getEncodedName()) +<a name="line.4297"></a>
+<span class="sourceLineNo">4298</span>          ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.4298"></a>
+<span class="sourceLineNo">4299</span>              this.getRegionServerServices().getServerName()));<a name="line.4299"></a>
 <span class="sourceLineNo">4300</span>    }<a name="line.4300"></a>
 <span class="sourceLineNo">4301</span>  }<a name="line.4301"></a>
 <span class="sourceLineNo">4302</span><a name="line.4302"></a>
@@ -8610,7 +8610,8 @@
 <span class="sourceLineNo">8602</span>  public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8602"></a>
 <span class="sourceLineNo">8603</span>    requestFlush0(tracker);<a name="line.8603"></a>
 <span class="sourceLineNo">8604</span>  }<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span>}<a name="line.8605"></a>
+<span class="sourceLineNo">8605</span><a name="line.8605"></a>
+<span class="sourceLineNo">8606</span>}<a name="line.8606"></a>
 
 
 


[51/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.


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

Branch: refs/heads/asf-site
Commit: 883dde2f914991156db50a65348f20ed87c45704
Parents: 99353e0
Author: jenkins <bu...@apache.org>
Authored: Thu May 24 14:47:59 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Thu May 24 14:47:59 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |    4 +-
 apache_hbase_reference_guide.pdf                |    4 +-
 apidocs/index-all.html                          |    6 +
 .../org/apache/hadoop/hbase/CellComparator.html |   45 +-
 apidocs/org/apache/hadoop/hbase/ServerName.html |   81 +-
 .../hadoop/hbase/util/ByteBufferUtils.html      |  125 +-
 .../org/apache/hadoop/hbase/CellComparator.html |  228 +-
 .../org/apache/hadoop/hbase/ServerName.html     |  346 +-
 .../hadoop/hbase/util/ByteBufferUtils.html      | 2000 ++--
 .../hbase/util/Bytes.ByteArrayComparator.html   |    2 +-
 .../hbase/util/Bytes.RowEndKeyComparator.html   |    2 +-
 .../org/apache/hadoop/hbase/util/Bytes.html     |    2 +-
 book.html                                       |    2 +-
 bulk-loads.html                                 |    4 +-
 checkstyle-aggregate.html                       | 9896 +++++++++---------
 checkstyle.rss                                  |   52 +-
 coc.html                                        |    4 +-
 dependencies.html                               |    4 +-
 dependency-convergence.html                     |    4 +-
 dependency-info.html                            |    4 +-
 dependency-management.html                      |    4 +-
 devapidocs/allclasses-frame.html                |    1 +
 devapidocs/allclasses-noframe.html              |    1 +
 devapidocs/constant-values.html                 |    6 +-
 devapidocs/index-all.html                       |   49 +-
 .../org/apache/hadoop/hbase/BBKVComparator.html |  387 +
 .../apache/hadoop/hbase/BaseConfigurable.html   |    4 +-
 .../hadoop/hbase/ByteBufferExtendedCell.html    |    8 +-
 .../hadoop/hbase/ByteBufferKeyOnlyKeyValue.html |    4 +-
 .../apache/hadoop/hbase/ByteBufferKeyValue.html |    4 +-
 .../org/apache/hadoop/hbase/CellComparator.html |   45 +-
 .../CellComparatorImpl.MetaCellComparator.html  |   43 +-
 .../apache/hadoop/hbase/CellComparatorImpl.html |  116 +-
 .../org/apache/hadoop/hbase/ExtendedCell.html   |   68 +-
 .../hadoop/hbase/IndividualBytesFieldCell.html  |    4 +-
 .../hadoop/hbase/KeyValue.KeyOnlyKeyValue.html  |    2 +-
 .../org/apache/hadoop/hbase/KeyValue.html       |    4 +-
 .../hadoop/hbase/NoTagsByteBufferKeyValue.html  |    4 +-
 .../org/apache/hadoop/hbase/NoTagsKeyValue.html |    2 +-
 ...ateCellUtil.EmptyByteBufferExtendedCell.html |    4 +-
 .../hadoop/hbase/PrivateCellUtil.EmptyCell.html |    4 +-
 ...llUtil.FirstOnRowByteBufferExtendedCell.html |    4 +-
 .../hbase/PrivateCellUtil.FirstOnRowCell.html   |    4 +-
 ...til.FirstOnRowColByteBufferExtendedCell.html |    4 +-
 .../PrivateCellUtil.FirstOnRowColCell.html      |    4 +-
 ...l.FirstOnRowColTSByteBufferExtendedCell.html |    4 +-
 .../PrivateCellUtil.FirstOnRowColTSCell.html    |    4 +-
 ...vateCellUtil.FirstOnRowDeleteFamilyCell.html |    4 +-
 ...ellUtil.LastOnRowByteBufferExtendedCell.html |    4 +-
 .../hbase/PrivateCellUtil.LastOnRowCell.html    |    4 +-
 ...Util.LastOnRowColByteBufferExtendedCell.html |    4 +-
 .../hbase/PrivateCellUtil.LastOnRowColCell.html |    4 +-
 ...llUtil.TagRewriteByteBufferExtendedCell.html |    4 +-
 .../hbase/PrivateCellUtil.TagRewriteCell.html   |    4 +-
 ...alueAndTagRewriteByteBufferExtendedCell.html |    4 +-
 .../PrivateCellUtil.ValueAndTagRewriteCell.html |    4 +-
 .../org/apache/hadoop/hbase/ServerName.html     |   87 +-
 .../apache/hadoop/hbase/SizeCachedKeyValue.html |    2 +-
 .../hadoop/hbase/SizeCachedNoTagsKeyValue.html  |    2 +-
 .../hadoop/hbase/backup/package-tree.html       |    4 +-
 .../hadoop/hbase/class-use/BBKVComparator.html  |  125 +
 .../hbase/class-use/ByteBufferKeyValue.html     |    8 +-
 .../org/apache/hadoop/hbase/class-use/Cell.html |   12 +-
 .../hbase/client/Mutation.CellWrapper.html      |    4 +-
 .../hadoop/hbase/client/package-tree.html       |   24 +-
 .../favored/StartcodeAgnosticServerName.html    |    2 +-
 ...nlyFilter.KeyOnlyByteBufferExtendedCell.html |    4 +-
 .../hadoop/hbase/filter/package-tree.html       |    8 +-
 ...BlockEncoder.OffheapDecodedExtendedCell.html |    4 +-
 ...feredDataBlockEncoder.OnheapDecodedCell.html |    4 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    4 +-
 .../apache/hadoop/hbase/ipc/package-tree.html   |    2 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |    2 +-
 .../hadoop/hbase/master/package-tree.html       |    6 +-
 .../hadoop/hbase/monitoring/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/package-frame.html  |    1 +
 .../apache/hadoop/hbase/package-summary.html    |  219 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   28 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    6 +-
 .../hadoop/hbase/quotas/package-tree.html       |    8 +-
 .../regionserver/ByteBufferChunkKeyValue.html   |   12 +-
 .../hadoop/hbase/regionserver/HRegion.html      |   10 +-
 .../HRegionServer.CompactionChecker.html        |   14 +-
 .../HRegionServer.MovedRegionInfo.html          |   16 +-
 .../HRegionServer.MovedRegionsCleaner.html      |   16 +-
 .../HRegionServer.PeriodicMemStoreFlusher.html  |   12 +-
 .../hbase/regionserver/HRegionServer.html       |  294 +-
 .../hbase/regionserver/MemStoreLABImpl.html     |   44 +-
 .../NoTagByteBufferChunkKeyValue.html           |   12 +-
 .../hadoop/hbase/regionserver/package-tree.html |   20 +-
 .../regionserver/querymatcher/package-tree.html |    4 +-
 .../hbase/regionserver/wal/package-tree.html    |    2 +-
 ...cationEndpoint.PeerRegionServerListener.html |   10 +-
 .../replication/HBaseReplicationEndpoint.html   |   55 +-
 .../ReplicationSource.LogsComparator.html       |    8 +-
 .../regionserver/ReplicationSource.html         |  157 +-
 ...upAdminEndpoint.RSGroupAdminServiceImpl.html |   26 +-
 .../hbase/rsgroup/RSGroupAdminEndpoint.html     |   50 +-
 .../hbase/rsgroup/RSGroupAdminServer.html       |   22 +-
 .../hbase/rsgroup/RSGroupBasedLoadBalancer.html |   30 +-
 ...InfoManagerImpl.FailedOpenUpdaterThread.html |   16 +-
 ...oupInfoManagerImpl.RSGroupStartupWorker.html |   16 +-
 ...oManagerImpl.ServerEventsListenerThread.html |   16 +-
 .../hbase/rsgroup/RSGroupInfoManagerImpl.html   |   90 +-
 .../hbase/security/access/package-tree.html     |    2 +-
 .../hadoop/hbase/security/package-tree.html     |    2 +-
 .../hadoop/hbase/thrift/package-tree.html       |    2 +-
 .../hadoop/hbase/util/ByteBufferUtils.html      |  118 +-
 .../hbase/util/MapReduceExtendedCell.html       |    4 +-
 .../apache/hadoop/hbase/util/UnsafeAccess.html  |   10 +-
 .../apache/hadoop/hbase/util/package-tree.html  |   10 +-
 .../hadoop/hbase/wal/WALFactory.Providers.html  |   16 +-
 .../org/apache/hadoop/hbase/wal/WALFactory.html |   80 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 devapidocs/overview-tree.html                   |   12 +-
 .../org/apache/hadoop/hbase/BBKVComparator.html |  245 +
 .../org/apache/hadoop/hbase/CellComparator.html |  228 +-
 .../CellComparatorImpl.MetaCellComparator.html  |  801 +-
 .../apache/hadoop/hbase/CellComparatorImpl.html |  801 +-
 .../org/apache/hadoop/hbase/ExtendedCell.html   |  170 +-
 .../hadoop/hbase/IndividualBytesFieldCell.html  |    2 +-
 .../hadoop/hbase/KeyValue.KVComparator.html     |    2 +-
 .../hadoop/hbase/KeyValue.KeyOnlyKeyValue.html  |    2 +-
 .../hadoop/hbase/KeyValue.MetaComparator.html   |    2 +-
 .../hbase/KeyValue.SamePrefixComparator.html    |    2 +-
 .../org/apache/hadoop/hbase/KeyValue.Type.html  |    2 +-
 .../org/apache/hadoop/hbase/KeyValue.html       |    2 +-
 .../org/apache/hadoop/hbase/ServerName.html     |  346 +-
 .../org/apache/hadoop/hbase/Version.html        |    6 +-
 .../io/hfile/HFile.CachingBlockReader.html      |    4 +-
 .../hadoop/hbase/io/hfile/HFile.FileInfo.html   |    4 +-
 .../hadoop/hbase/io/hfile/HFile.Reader.html     |    4 +-
 .../hadoop/hbase/io/hfile/HFile.Writer.html     |    4 +-
 .../hbase/io/hfile/HFile.WriterFactory.html     |    4 +-
 .../org/apache/hadoop/hbase/io/hfile/HFile.html |    4 +-
 .../BaseLoadBalancer.Cluster.Action.Type.html   |    6 +-
 .../BaseLoadBalancer.Cluster.Action.html        |    6 +-
 ...LoadBalancer.Cluster.AssignRegionAction.html |    6 +-
 .../BaseLoadBalancer.Cluster.LocalityType.html  |    6 +-
 ...seLoadBalancer.Cluster.MoveRegionAction.html |    6 +-
 ...eLoadBalancer.Cluster.SwapRegionsAction.html |    6 +-
 .../balancer/BaseLoadBalancer.Cluster.html      |    6 +-
 .../BaseLoadBalancer.DefaultRackManager.html    |    6 +-
 .../hbase/master/balancer/BaseLoadBalancer.html |    6 +-
 .../hadoop/hbase/regionserver/CellSet.html      |    2 +-
 .../regionserver/ChunkCreator.ChunkType.html    |    2 +-
 ...ator.MemStoreChunkPool.StatisticsThread.html |    2 +-
 .../ChunkCreator.MemStoreChunkPool.html         |    2 +-
 .../hadoop/hbase/regionserver/ChunkCreator.html |    2 +-
 .../HRegion.BatchOperation.Visitor.html         |   29 +-
 .../regionserver/HRegion.BatchOperation.html    |   29 +-
 .../regionserver/HRegion.BulkLoadListener.html  |   29 +-
 .../HRegion.FlushResult.Result.html             |   29 +-
 .../hbase/regionserver/HRegion.FlushResult.html |   29 +-
 .../regionserver/HRegion.FlushResultImpl.html   |   29 +-
 .../HRegion.MutationBatchOperation.html         |   29 +-
 .../HRegion.ObservedExceptionsInBatch.html      |   29 +-
 .../HRegion.PrepareFlushResult.html             |   29 +-
 .../regionserver/HRegion.RegionScannerImpl.html |   29 +-
 .../HRegion.ReplayBatchOperation.html           |   29 +-
 .../regionserver/HRegion.RowLockContext.html    |   29 +-
 .../hbase/regionserver/HRegion.RowLockImpl.html |   29 +-
 .../hbase/regionserver/HRegion.WriteState.html  |   29 +-
 .../hadoop/hbase/regionserver/HRegion.html      |   29 +-
 .../HRegionServer.CompactionChecker.html        | 5161 +++++----
 .../HRegionServer.MovedRegionInfo.html          | 5161 +++++----
 .../HRegionServer.MovedRegionsCleaner.html      | 5161 +++++----
 .../HRegionServer.PeriodicMemStoreFlusher.html  | 5161 +++++----
 .../hbase/regionserver/HRegionServer.html       | 5161 +++++----
 .../hbase/regionserver/MemStoreLABImpl.html     |  477 +-
 ...cationEndpoint.PeerRegionServerListener.html |  391 +-
 .../replication/HBaseReplicationEndpoint.html   |  391 +-
 .../ReplicationSource.LogsComparator.html       | 1041 +-
 .../regionserver/ReplicationSource.html         | 1041 +-
 ...upAdminEndpoint.RSGroupAdminServiceImpl.html |  924 +-
 .../hbase/rsgroup/RSGroupAdminEndpoint.html     |  924 +-
 .../hbase/rsgroup/RSGroupAdminServer.html       |  776 +-
 .../hbase/rsgroup/RSGroupBasedLoadBalancer.html |  503 +-
 ...InfoManagerImpl.FailedOpenUpdaterThread.html | 1792 ++--
 ...oupInfoManagerImpl.RSGroupStartupWorker.html | 1792 ++--
 ...oManagerImpl.ServerEventsListenerThread.html | 1792 ++--
 .../hbase/rsgroup/RSGroupInfoManagerImpl.html   | 1792 ++--
 .../hadoop/hbase/util/ByteBufferUtils.html      | 2000 ++--
 .../hbase/util/Bytes.ByteArrayComparator.html   |    2 +-
 .../hadoop/hbase/util/Bytes.Comparer.html       |    2 +-
 ...raphicalComparerHolder.PureJavaComparer.html |    2 +-
 ...ographicalComparerHolder.UnsafeComparer.html |    2 +-
 .../Bytes.LexicographicalComparerHolder.html    |    2 +-
 .../hbase/util/Bytes.RowEndKeyComparator.html   |    2 +-
 .../org/apache/hadoop/hbase/util/Bytes.html     |    2 +-
 .../apache/hadoop/hbase/util/UnsafeAccess.html  |   32 +-
 .../hadoop/hbase/wal/WALFactory.Providers.html  |  794 +-
 .../org/apache/hadoop/hbase/wal/WALFactory.html |  794 +-
 downloads.html                                  |    4 +-
 export_control.html                             |    4 +-
 index.html                                      |    4 +-
 integration.html                                |    4 +-
 issue-tracking.html                             |    4 +-
 license.html                                    |  208 +-
 mail-lists.html                                 |    4 +-
 metrics.html                                    |    4 +-
 old_news.html                                   |    4 +-
 plugin-management.html                          |    4 +-
 plugins.html                                    |    4 +-
 poweredbyhbase.html                             |    4 +-
 project-info.html                               |    4 +-
 project-reports.html                            |    4 +-
 project-summary.html                            |    4 +-
 pseudo-distributed.html                         |    4 +-
 replication.html                                |    4 +-
 resources.html                                  |    4 +-
 source-repository.html                          |    4 +-
 sponsors.html                                   |    4 +-
 supportingprojects.html                         |    4 +-
 team-list.html                                  |    4 +-
 testdevapidocs/allclasses-frame.html            |    4 +
 testdevapidocs/allclasses-noframe.html          |    4 +
 testdevapidocs/constant-values.html             |   19 +
 testdevapidocs/index-all.html                   |  188 +-
 .../hbase/PerformanceEvaluation.AppendTest.html |   29 +-
 ...rformanceEvaluation.AsyncRandomReadTest.html |   45 +-
 ...formanceEvaluation.AsyncRandomWriteTest.html |   42 +-
 .../PerformanceEvaluation.AsyncScanTest.html    |   37 +-
 ...manceEvaluation.AsyncSequentialReadTest.html |   31 +-
 ...anceEvaluation.AsyncSequentialWriteTest.html |   84 +-
 .../PerformanceEvaluation.AsyncTableTest.html   |   19 +-
 .../hbase/PerformanceEvaluation.AsyncTest.html  |   72 +-
 ...rformanceEvaluation.BufferedMutatorTest.html |   21 +-
 .../PerformanceEvaluation.CASTableTest.html     |   19 +-
 ...erformanceEvaluation.CheckAndDeleteTest.html |   29 +-
 ...erformanceEvaluation.CheckAndMutateTest.html |   29 +-
 .../PerformanceEvaluation.CheckAndPutTest.html  |   29 +-
 .../PerformanceEvaluation.CmdDescriptor.html    |   16 +-
 .../PerformanceEvaluation.FilteredScanTest.html |   33 +-
 .../PerformanceEvaluation.IncrementTest.html    |   29 +-
 .../PerformanceEvaluation.RandomReadTest.html   |   41 +-
 ...Evaluation.RandomScanWithRange10000Test.html |   13 +-
 ...eEvaluation.RandomScanWithRange1000Test.html |   13 +-
 ...ceEvaluation.RandomScanWithRange100Test.html |   13 +-
 ...nceEvaluation.RandomScanWithRange10Test.html |   13 +-
 ...manceEvaluation.RandomScanWithRangeTest.html |   35 +-
 ...erformanceEvaluation.RandomSeekScanTest.html |   31 +-
 .../PerformanceEvaluation.RandomWriteTest.html  |   40 +-
 .../hbase/PerformanceEvaluation.ScanTest.html   |   33 +-
 ...erformanceEvaluation.SequentialReadTest.html |   29 +-
 ...rformanceEvaluation.SequentialWriteTest.html |   84 +-
 .../hbase/PerformanceEvaluation.TableTest.html  |   17 +-
 .../hbase/PerformanceEvaluation.Test.html       |   75 +-
 .../hbase/PerformanceEvaluation.TestBase.html   |  177 +-
 .../PerformanceEvaluation.TestOptions.html      |  486 +-
 .../hadoop/hbase/PerformanceEvaluation.html     |   65 +-
 .../hadoop/hbase/TestByteBufferKeyValue.html    |   54 +-
 ...cing.BlockCompactionsInCompletionRegion.html |    2 +-
 ...tIOFencing.BlockCompactionsInPrepRegion.html |    2 +-
 .../TestIOFencing.CompactionBlockerRegion.html  |    2 +-
 .../hadoop/hbase/TestPerformanceEvaluation.html |   46 +-
 .../org/apache/hadoop/hbase/TestServerName.html |    4 +-
 .../hbase/class-use/HBaseClassTestRule.html     |   32 +-
 .../hbase/class-use/HBaseTestingUtility.html    |   16 +-
 ...anceEvaluation.AsyncSequentialWriteTest.html |   42 +-
 ...rformanceEvaluation.SequentialWriteTest.html |   42 +-
 .../PerformanceEvaluation.TestOptions.html      |    6 +-
 ...stFromClientSideScanExcpetion.MyHRegion.html |    2 +-
 ...ook.CompactionCompletionNotifyingRegion.html |    2 +-
 ...FilesEndpoint.HRegionForRefreshHFilesEP.html |    2 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    2 +-
 .../hbase/master/TestMasterTransitions.html     |    4 +-
 .../TestMetaAssignmentWithStopMaster.html       |  374 +
 .../hbase/master/TestMetaShutdownHandler.html   |    4 +-
 .../TestMetaAssignmentWithStopMaster.html       |  125 +
 .../hadoop/hbase/master/package-frame.html      |    1 +
 .../hadoop/hbase/master/package-summary.html    |   38 +-
 .../hadoop/hbase/master/package-tree.html       |    1 +
 .../org/apache/hadoop/hbase/package-tree.html   |   22 +-
 .../org/apache/hadoop/hbase/package-use.html    |   20 +-
 .../hadoop/hbase/procedure/package-tree.html    |    8 +-
 .../TestAtomicOperation.MockHRegion.html        |    2 +-
 .../TestHRegion.HRegionForTesting.html          |    2 +-
 .../TestHRegion.HRegionWithSeqId.html           |    2 +-
 ...penSeqNumUnexpectedIncrease.MockHRegion.html |    2 +-
 ...tRegionServerAbort.ErrorThrowingHRegion.html |    2 +-
 ...annerHeartbeatMessages.HeartbeatHRegion.html |    2 +-
 .../hadoop/hbase/regionserver/package-tree.html |    4 +-
 .../TestMetricsReplicationSourceImpl.html       |    4 +-
 ...licationSource.LocalReplicationEndpoint.html |  449 +
 .../TestRaceWhenCreatingReplicationSource.html  |  486 +
 .../TestRegionReplicaReplicationEndpoint.html   |    4 +-
 ...licationSource.LocalReplicationEndpoint.html |  125 +
 .../TestRaceWhenCreatingReplicationSource.html  |  125 +
 .../replication/regionserver/package-frame.html |    2 +
 .../regionserver/package-summary.html           |   10 +
 .../replication/regionserver/package-tree.html  |    2 +
 .../rsgroup/TestRSGroups.CPMasterObserver.html  |  852 ++
 .../hadoop/hbase/rsgroup/TestRSGroups.html      |  146 +-
 .../hadoop/hbase/rsgroup/TestRSGroupsBase.html  |    4 +-
 .../TestRSGroups.CPMasterObserver.html          |  165 +
 .../hadoop/hbase/rsgroup/package-frame.html     |    1 +
 .../hadoop/hbase/rsgroup/package-summary.html   |   10 +-
 .../hadoop/hbase/rsgroup/package-tree.html      |    1 +
 .../hadoop/hbase/rsgroup/package-use.html       |    3 +
 ...dantKVGenerator.ExtendedOffheapKeyValue.html |    4 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 testdevapidocs/overview-tree.html               |   16 +-
 .../hbase/PerformanceEvaluation.AppendTest.html | 4774 ++++-----
 ...rformanceEvaluation.AsyncRandomReadTest.html | 4774 ++++-----
 ...formanceEvaluation.AsyncRandomWriteTest.html | 4774 ++++-----
 .../PerformanceEvaluation.AsyncScanTest.html    | 4774 ++++-----
 ...manceEvaluation.AsyncSequentialReadTest.html | 4774 ++++-----
 ...anceEvaluation.AsyncSequentialWriteTest.html | 4774 ++++-----
 .../PerformanceEvaluation.AsyncTableTest.html   | 4774 ++++-----
 .../hbase/PerformanceEvaluation.AsyncTest.html  | 4774 ++++-----
 ...rformanceEvaluation.BufferedMutatorTest.html | 4774 ++++-----
 .../PerformanceEvaluation.CASTableTest.html     | 4774 ++++-----
 ...erformanceEvaluation.CheckAndDeleteTest.html | 4774 ++++-----
 ...erformanceEvaluation.CheckAndMutateTest.html | 4774 ++++-----
 .../PerformanceEvaluation.CheckAndPutTest.html  | 4774 ++++-----
 .../PerformanceEvaluation.CmdDescriptor.html    | 4774 ++++-----
 .../hbase/PerformanceEvaluation.Counter.html    | 4774 ++++-----
 ...PerformanceEvaluation.EvaluationMapTask.html | 4774 ++++-----
 .../PerformanceEvaluation.FilteredScanTest.html | 4774 ++++-----
 .../PerformanceEvaluation.IncrementTest.html    | 4774 ++++-----
 .../PerformanceEvaluation.RandomReadTest.html   | 4774 ++++-----
 ...Evaluation.RandomScanWithRange10000Test.html | 4774 ++++-----
 ...eEvaluation.RandomScanWithRange1000Test.html | 4774 ++++-----
 ...ceEvaluation.RandomScanWithRange100Test.html | 4774 ++++-----
 ...nceEvaluation.RandomScanWithRange10Test.html | 4774 ++++-----
 ...manceEvaluation.RandomScanWithRangeTest.html | 4774 ++++-----
 ...erformanceEvaluation.RandomSeekScanTest.html | 4774 ++++-----
 .../PerformanceEvaluation.RandomWriteTest.html  | 4774 ++++-----
 .../hbase/PerformanceEvaluation.RunResult.html  | 4774 ++++-----
 .../hbase/PerformanceEvaluation.ScanTest.html   | 4774 ++++-----
 ...erformanceEvaluation.SequentialReadTest.html | 4774 ++++-----
 ...rformanceEvaluation.SequentialWriteTest.html | 4774 ++++-----
 .../hbase/PerformanceEvaluation.Status.html     | 4774 ++++-----
 .../hbase/PerformanceEvaluation.TableTest.html  | 4774 ++++-----
 .../hbase/PerformanceEvaluation.Test.html       | 4774 ++++-----
 .../hbase/PerformanceEvaluation.TestBase.html   | 4774 ++++-----
 .../PerformanceEvaluation.TestOptions.html      | 4774 ++++-----
 .../hadoop/hbase/PerformanceEvaluation.html     | 4774 ++++-----
 .../hadoop/hbase/TestByteBufferKeyValue.html    |  404 +-
 .../hadoop/hbase/TestPerformanceEvaluation.html |   48 +-
 .../org/apache/hadoop/hbase/TestServerName.html |   85 +-
 .../apache/hadoop/hbase/TestTagRewriteCell.html |   13 +-
 .../TestMetaAssignmentWithStopMaster.html       |  158 +
 ...licationSource.LocalReplicationEndpoint.html |  280 +
 .../TestRaceWhenCreatingReplicationSource.html  |  280 +
 .../rsgroup/TestRSGroups.CPMasterObserver.html  |  521 +
 .../hadoop/hbase/rsgroup/TestRSGroups.html      |  706 +-
 348 files changed, 124556 insertions(+), 116945 deletions(-)
----------------------------------------------------------------------


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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 315c6fa..6b32e2b 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20180523144525+00'00')
-/CreationDate (D:20180523144525+00'00')
+/ModDate (D:20180524144504+00'00')
+/CreationDate (D:20180524144504+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/apidocs/index-all.html
----------------------------------------------------------------------
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index 0978d66..49fd995 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -6922,6 +6922,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ServerName.html#getHostname--">getHostname()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ServerName.html#getHostnameLowerCase--">getHostnameLowerCase()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/RetriesExhaustedWithDetailsException.html#getHostnamePort-int-">getHostnamePort(int)</a></span> - Method in exception org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/RetriesExhaustedWithDetailsException.html" title="class in org.apache.hadoop.hbase.client">RetriesExhaustedWithDetailsException</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HRegionLocation.html#getHostnamePort--">getHostnamePort()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a></dt>
@@ -8444,6 +8446,8 @@
              Use <a href="org/apache/hadoop/hbase/client/RegionInfo.html#getShortNameToLog-java.util.List-"><code>RegionInfo.getShortNameToLog(List)</code></a>)}.</span></div>
 </div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparator.html#getSimpleComparator--">getSimpleComparator()</a></span> - Method in interface org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/ImmutableBytesWritable.html#getSize--">getSize()</a></span> - Method in class org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a></dt>
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>
@@ -19258,6 +19262,8 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/locking/EntityLock.html#unlock--">unlock()</a></span> - Method in class org.apache.hadoop.hbase.client.locking.<a href="org/apache/hadoop/hbase/client/locking/EntityLock.html" title="class in org.apache.hadoop.hbase.client.locking">EntityLock</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/ByteBufferUtils.html#UNSAFE_UNALIGNED">UNSAFE_UNALIGNED</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ByteBufferUtils.html" title="class in org.apache.hadoop.hbase.util">ByteBufferUtils</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/ByteRange.html#unset--">unset()</a></span> - Method in interface org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ByteRange.html" title="interface in org.apache.hadoop.hbase.util">ByteRange</a></dt>
 <dd>
 <div class="block">Nullifies this ByteRange.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/apidocs/org/apache/hadoop/hbase/CellComparator.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/CellComparator.html b/apidocs/org/apache/hadoop/hbase/CellComparator.html
index b9da729..b963f24 100644
--- a/apidocs/org/apache/hadoop/hbase/CellComparator.html
+++ b/apidocs/org/apache/hadoop/hbase/CellComparator.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":17};
+var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":17,"i10":6};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -107,7 +107,7 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>@InterfaceAudience.Public
  @InterfaceStability.Evolving
-public interface <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.30">CellComparator</a>
+public interface <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.31">CellComparator</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;</pre>
 <div class="block">Comparator for comparing cells and has some specialized methods that allows comparing individual
  cell components like row, family, qualifier and timestamp</div>
@@ -202,6 +202,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <div class="block">A comparator for ordering cells in user-space tables.</div>
 </td>
 </tr>
+<tr id="i10" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#getSimpleComparator--">getSimpleComparator</a></span>()</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.util.Comparator">
@@ -230,7 +234,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>getInstance</h4>
-<pre>static&nbsp;<a href="../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.38">getInstance</a>()</pre>
+<pre>static&nbsp;<a href="../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.39">getInstance</a>()</pre>
 <div class="block">A comparator for ordering cells in user-space tables. Useful when writing cells in sorted
  order as necessary for bulk import (i.e. via MapReduce)
  <p>
@@ -244,7 +248,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compare</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.51">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.52">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
             <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares two cells. The key part of the cell is taken for comparison which
  includes row, family, qualifier, timestamp and type</div>
@@ -266,7 +270,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compare</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.59">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.60">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
             <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell,
             boolean&nbsp;ignoreSequenceid)</pre>
 <div class="block">Compare cells.</div>
@@ -285,7 +289,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.68">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.69">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                 <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares the rows of two cells.</div>
 <dl>
@@ -304,7 +308,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.80">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.81">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                 byte[]&nbsp;bytes,
                 int&nbsp;offset,
                 int&nbsp;length)</pre>
@@ -328,7 +332,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareWithoutRow</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.90">compareWithoutRow</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.91">compareWithoutRow</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                       <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares the two cells excluding the row part. It compares family, qualifier,
  timestamp and the type</div>
@@ -348,7 +352,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareFamilies</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.99">compareFamilies</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.100">compareFamilies</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                     <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares the families of the two cells</div>
 <dl>
@@ -367,7 +371,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareQualifiers</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.108">compareQualifiers</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.109">compareQualifiers</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                       <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares the qualifiers of the two cells</div>
 <dl>
@@ -386,7 +390,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTimestamps</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.120">compareTimestamps</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.121">compareTimestamps</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                       <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of
  newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found
@@ -405,10 +409,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <a name="compareTimestamps-long-long-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>compareTimestamps</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.132">compareTimestamps</a>(long&nbsp;leftCellts,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.133">compareTimestamps</a>(long&nbsp;leftCellts,
                       long&nbsp;rightCellts)</pre>
 <div class="block">Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of
  newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found
@@ -424,6 +428,21 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 </dl>
 </li>
 </ul>
+<a name="getSimpleComparator--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getSimpleComparator</h4>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.140">getSimpleComparator</a>()</pre>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>A dumbed-down, fast comparator for hbase2 base-type, the <code>ByteBufferKeyValue</code>.
+   Create an instance when you make a new memstore, when you know only BBKVs will be passed.
+   Do not pollute with types other than BBKV if can be helped; the Comparator will slow.</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/apidocs/org/apache/hadoop/hbase/ServerName.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/ServerName.html b/apidocs/org/apache/hadoop/hbase/ServerName.html
index e64412a..82a2c34 100644
--- a/apidocs/org/apache/hadoop/hbase/ServerName.html
+++ b/apidocs/org/apache/hadoop/hbase/ServerName.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":42,"i4":10,"i5":10,"i6":10,"i7":41,"i8":41,"i9":41,"i10":10,"i11":10,"i12":10,"i13":9,"i14":9,"i15":41,"i16":41,"i17":9,"i18":41,"i19":9,"i20":10,"i21":10,"i22":9,"i23":9,"i24":9};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":42,"i4":10,"i5":10,"i6":10,"i7":10,"i8":41,"i9":41,"i10":41,"i11":10,"i12":10,"i13":10,"i14":9,"i15":9,"i16":41,"i17":41,"i18":9,"i19":41,"i20":9,"i21":10,"i22":10,"i23":9,"i24":9,"i25":9};
 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";
@@ -247,14 +247,18 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#getHostname--">getHostname</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i5" 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/ServerName.html#getHostnameLowerCase--">getHostnameLowerCase</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#getPort--">getPort</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" 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/ServerName.html#getServerName--">getServerName</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>static <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/ServerName.html#getServerName-java.lang.String-long-">getServerName</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;hostAndPort,
              long&nbsp;startcode)</code>
@@ -263,7 +267,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 </div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>static <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/ServerName.html#getServerNameLessStartCode-java.lang.String-">getServerNameLessStartCode</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;inServerName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -271,7 +275,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 </div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>static long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#getServerStartcodeFromServerName-java.lang.String-">getServerStartcodeFromServerName</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;serverName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -279,28 +283,28 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 </div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#getStartcode--">getStartcode</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#getVersionedBytes--">getVersionedBytes</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#hashCode--">hashCode</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#isFullServerName-java.lang.String-">isFullServerName</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;str)</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#isSameAddress-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.ServerName-">isSameAddress</a></span>(<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;left,
              <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;right)</code>&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>static <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/ServerName.html#parseHostname-java.lang.String-">parseHostname</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;serverName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -308,7 +312,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 </div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#parsePort-java.lang.String-">parsePort</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;serverName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -316,11 +320,11 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 </div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#parseServerName-java.lang.String-">parseServerName</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;str)</code>&nbsp;</td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>static long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#parseStartcode-java.lang.String-">parseStartcode</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;serverName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -328,28 +332,28 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 </div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#parseVersionedServerName-byte:A-">parseVersionedServerName</a></span>(byte[]&nbsp;versionedBytes)</code>
 <div class="block">Use this method instantiating a <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase"><code>ServerName</code></a> from bytes
  gotten from a call to <a href="../../../../org/apache/hadoop/hbase/ServerName.html#getVersionedBytes--"><code>getVersionedBytes()</code></a>.</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i21" 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/ServerName.html#toShortString--">toShortString</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" 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/ServerName.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#valueOf-java.lang.String-">valueOf</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;serverName)</code>
 <div class="block">Retrieve an instance of ServerName.</div>
 </td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#valueOf-java.lang.String-int-long-">valueOf</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;hostname,
        int&nbsp;port,
@@ -357,7 +361,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <div class="block">Retrieve an instance of ServerName.</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ServerName.html#valueOf-java.lang.String-long-">valueOf</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;hostAndPort,
        long&nbsp;startCode)</code>
@@ -607,13 +611,22 @@ public static&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hba
 <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/ServerName.html#line.232">getHostname</a>()</pre>
 </li>
 </ul>
+<a name="getHostnameLowerCase--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getHostnameLowerCase</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/ServerName.html#line.236">getHostnameLowerCase</a>()</pre>
+</li>
+</ul>
 <a name="getPort--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getPort</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.236">getPort</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.240">getPort</a>()</pre>
 </li>
 </ul>
 <a name="getStartcode--">
@@ -622,7 +635,7 @@ public static&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartcode</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.240">getStartcode</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.244">getStartcode</a>()</pre>
 </li>
 </ul>
 <a name="getServerName-java.lang.String-long-">
@@ -632,7 +645,7 @@ public static&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hba
 <li class="blockList">
 <h4>getServerName</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;<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/ServerName.html#line.273">getServerName</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;hostAndPort,
+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/ServerName.html#line.277">getServerName</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;hostAndPort,
                                                long&nbsp;startcode)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Since 2.0. Use <a href="../../../../org/apache/hadoop/hbase/ServerName.html#valueOf-java.lang.String-long-"><code>valueOf(String, long)</code></a> instead.</span></div>
 <dl>
@@ -652,7 +665,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <li class="blockList">
 <h4>getHostAndPort</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="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/ServerName.html#line.287">getHostAndPort</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/ServerName.html#line.291">getHostAndPort</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Since 2.0. Use <a href="../../../../org/apache/hadoop/hbase/ServerName.html#getAddress--"><code>getAddress()</code></a> instead.</span></div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -667,7 +680,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>getAddress</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.291">getAddress</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.295">getAddress</a>()</pre>
 </li>
 </ul>
 <a name="getServerStartcodeFromServerName-java.lang.String-">
@@ -677,7 +690,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <li class="blockList">
 <h4>getServerStartcodeFromServerName</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;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.301">getServerStartcodeFromServerName</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;serverName)</pre>
+public static&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.305">getServerStartcodeFromServerName</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;serverName)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Since 2.0. Use instance of ServerName to pull out start code.</span></div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -694,7 +707,7 @@ public static&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hba
 <li class="blockList">
 <h4>getServerNameLessStartCode</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;<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/ServerName.html#line.313">getServerNameLessStartCode</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;inServerName)</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/ServerName.html#line.317">getServerNameLessStartCode</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;inServerName)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Since 2.0. Use <a href="../../../../org/apache/hadoop/hbase/ServerName.html#getAddress--"><code>getAddress()</code></a></span></div>
 <div class="block">Utility method to excise the start code from a server name</div>
 <dl>
@@ -711,7 +724,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.324">compareTo</a>(<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;other)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.328">compareTo</a>(<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;other)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true#compareTo-T-" title="class or interface in java.lang">compareTo</a></code>&nbsp;in interface&nbsp;<code><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;<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></dd>
@@ -724,7 +737,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.350">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.354">hashCode</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a></code>&nbsp;in class&nbsp;<code><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></code></dd>
@@ -737,7 +750,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.355">equals</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>&nbsp;o)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.359">equals</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>&nbsp;o)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a></code>&nbsp;in class&nbsp;<code><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></code></dd>
@@ -750,7 +763,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>isSameAddress</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.367">isSameAddress</a>(<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;left,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.371">isSameAddress</a>(<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;left,
                                     <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;right)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -767,7 +780,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>parseVersionedServerName</h4>
-<pre>public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.384">parseVersionedServerName</a>(byte[]&nbsp;versionedBytes)</pre>
+<pre>public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.388">parseVersionedServerName</a>(byte[]&nbsp;versionedBytes)</pre>
 <div class="block">Use this method instantiating a <a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase"><code>ServerName</code></a> from bytes
  gotten from a call to <a href="../../../../org/apache/hadoop/hbase/ServerName.html#getVersionedBytes--"><code>getVersionedBytes()</code></a>.  Will take care of the
  case where bytes were written by an earlier version of hbase.</div>
@@ -787,7 +800,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockList">
 <li class="blockList">
 <h4>parseServerName</h4>
-<pre>public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.401">parseServerName</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;str)</pre>
+<pre>public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.405">parseServerName</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;str)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>str</code> - Either an instance of <a href="../../../../org/apache/hadoop/hbase/ServerName.html#toString--"><code>toString()</code></a> or a
@@ -803,7 +816,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isFullServerName</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.411">isFullServerName</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;str)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ServerName.html#line.415">isFullServerName</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;str)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if the String follows the pattern of <a href="../../../../org/apache/hadoop/hbase/ServerName.html#toString--"><code>toString()</code></a>, false


[04/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index bacc42a..9d38150 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -3329,6 +3329,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestStoreScanner.html#CF">CF</a></span> - Static variable 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/replication/regionserver/TestRaceWhenCreatingReplicationSource.html#CF">CF</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#CF">CF</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SerialReplicationTestBase</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/visibility/TestDefaultScanLabelGeneratorStack.html#CF">CF</a></span> - Static variable in class org.apache.hadoop.hbase.security.visibility.<a href="org/apache/hadoop/hbase/security/visibility/TestDefaultScanLabelGeneratorStack.html" title="class in org.apache.hadoop.hbase.security.visibility">TestDefaultScanLabelGeneratorStack</a></dt>
@@ -5115,6 +5117,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterTransitions.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterTransitions.html" title="class in org.apache.hadoop.hbase.master">TestMasterTransitions</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html" title="class in org.apache.hadoop.hbase.master">TestMetaAssignmentWithStopMaster</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMetaShutdownHandler.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMetaShutdownHandler.html" title="class in org.apache.hadoop.hbase.master">TestMetaShutdownHandler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMetricsMasterProcSourceImpl.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMetricsMasterProcSourceImpl.html" title="class in org.apache.hadoop.hbase.master">TestMetricsMasterProcSourceImpl</a></dt>
@@ -5737,6 +5741,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceImpl.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestMetricsReplicationSourceImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpoint.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRegionReplicaReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpointNoMaster.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpointNoMaster.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRegionReplicaReplicationEndpointNoMaster</a></dt>
@@ -6844,12 +6850,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHStore.html#closeCompactedFile-int-">closeCompactedFile(int)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHStore.html" title="class in org.apache.hadoop.hbase.regionserver">TestHStore</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#closeConnection--">closeConnection()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncTest</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#closeConnection--">closeConnection()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/test/IntegrationTestReplication.ClusterID.html#closeConnection--">closeConnection()</a></span> - Method in class org.apache.hadoop.hbase.test.<a href="org/apache/hadoop/hbase/test/IntegrationTestReplication.ClusterID.html" title="class in org.apache.hadoop.hbase.test">IntegrationTestReplication.ClusterID</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestAssignmentListener.DummyAssignmentListener.html#closeCount">closeCount</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestAssignmentListener.DummyAssignmentListener.html" title="class in org.apache.hadoop.hbase.master">TestAssignmentListener.DummyAssignmentListener</a></dt>
@@ -8386,6 +8386,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#CONN">CONN</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html#connCount">connCount</a></span> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AcidGuaranteesTestTool.AtomicGetReader.html#connection">connection</a></span> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/AcidGuaranteesTestTool.AtomicGetReader.html" title="class in org.apache.hadoop.hbase">AcidGuaranteesTestTool.AtomicGetReader</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AcidGuaranteesTestTool.AtomicityWriter.html#connection">connection</a></span> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/AcidGuaranteesTestTool.AtomicityWriter.html" title="class in org.apache.hadoop.hbase">AcidGuaranteesTestTool.AtomicityWriter</a></dt>
@@ -8974,6 +8976,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/namespace/TestNamespaceAuditor.CPMasterObserver.html#CPMasterObserver--">CPMasterObserver()</a></span> - Constructor for class org.apache.hadoop.hbase.namespace.<a href="org/apache/hadoop/hbase/namespace/TestNamespaceAuditor.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.namespace">TestNamespaceAuditor.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#CPMasterObserver--">CPMasterObserver()</a></span> - Constructor for class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestClassLoading.html#cpName1">cpName1</a></span> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestClassLoading.html" title="class in org.apache.hadoop.hbase.coprocessor">TestClassLoading</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestClassLoading.html#cpName2">cpName2</a></span> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestClassLoading.html" title="class in org.apache.hadoop.hbase.coprocessor">TestClassLoading</a></dt>
@@ -9010,6 +9014,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#cq">cq</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegionReplayEvents</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html#CQ">CQ</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#CQ">CQ</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SerialReplicationTestBase</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestSequenceIdMonotonicallyIncreasing.html#CQ">CQ</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestSequenceIdMonotonicallyIncreasing.html" title="class in org.apache.hadoop.hbase">TestSequenceIdMonotonicallyIncreasing</a></dt>
@@ -9202,12 +9208,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/MockRegionServerServices.html#createConnection-org.apache.hadoop.conf.Configuration-">createConnection(Configuration)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MockRegionServerServices.html" title="class in org.apache.hadoop.hbase">MockRegionServerServices</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#createConnection--">createConnection()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncTest</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#createConnection--">createConnection()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHeapMemoryManager.RegionServerStub.html#createConnection-org.apache.hadoop.conf.Configuration-">createConnection(Configuration)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHeapMemoryManager.RegionServerStub.html" title="class in org.apache.hadoop.hbase.regionserver">TestHeapMemoryManager.RegionServerStub</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.DummyServer.html#createConnection-org.apache.hadoop.conf.Configuration-">createConnection(Configuration)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.DummyServer.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitLogWorker.DummyServer</a></dt>
@@ -12071,12 +12071,16 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html#doStart--">doStart()</a></span> - Method in class org.apache.hadoop.hbase.client.replication.<a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.client.replication">TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html#doStart--">doStart()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html#doStart--">doStart()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">SerialReplicationTestBase.LocalReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#doStart--">doStart()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.ReplicationEndpointForTest</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html#doStop--">doStop()</a></span> - Method in class org.apache.hadoop.hbase.client.replication.<a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.client.replication">TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html#doStop--">doStop()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html#doStop--">doStop()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">SerialReplicationTestBase.LocalReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#doStop--">doStop()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.ReplicationEndpointForTest</a></dt>
@@ -14744,6 +14748,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/TestWALActionsListener.html#fs">fs</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/TestWALActionsListener.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestWALActionsListener</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html#FS">FS</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#FS">FS</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicationSource</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.html#fs">fs</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicationSourceManager</a></dt>
@@ -14963,6 +14969,14 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/balancer/LoadBalancerPerformanceEvaluation.html#generateRegionsAndServers--">generateRegionsAndServers()</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/LoadBalancerPerformanceEvaluation.html" title="class in org.apache.hadoop.hbase.master.balancer">LoadBalancerPerformanceEvaluation</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html#generateRow-int-">generateRow(int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncRandomWriteTest</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html#generateRow-int-">generateRow(int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncSequentialWriteTest</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html#generateRow-int-">generateRow(int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.RandomWriteTest</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.SequentialWriteTest.html#generateRow-int-">generateRow(int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.SequentialWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.SequentialWriteTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationDroppedTables.html#generateRowKey-int-">generateRowKey(int)</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationDroppedTables.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationDroppedTables</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestFilterListOrOperatorWithBlkCnt.html#generateRows-int-org.apache.hadoop.hbase.client.Table-byte:A-byte:A-byte:A-">generateRows(int, Table, byte[], byte[], byte[])</a></span> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestFilterListOrOperatorWithBlkCnt.html" title="class in org.apache.hadoop.hbase.filter">TestFilterListOrOperatorWithBlkCnt</a></dt>
@@ -15750,6 +15764,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#getConfigurationWoPrincipal--">getConfigurationWoPrincipal()</a></span> - Static method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/HBaseKerberosUtils.html" title="class in org.apache.hadoop.hbase.security">HBaseKerberosUtils</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html#getConnCount--">getConnCount()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseTestingUtility.html#getConnection--">getConnection()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></dt>
 <dd>
 <div class="block">Get a Connection to the cluster.</div>
@@ -16613,6 +16629,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.FailingSplitMasterObserver.html#getMasterObserver--">getMasterObserver()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.FailingSplitMasterObserver.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitTransactionOnCluster.FailingSplitMasterObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#getMasterObserver--">getMasterObserver()</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/SecureTestUtil.MasterSyncObserver.html#getMasterObserver--">getMasterObserver()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/SecureTestUtil.MasterSyncObserver.html" title="class in org.apache.hadoop.hbase.security.access">SecureTestUtil.MasterSyncObserver</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.MasterSyncObserver.html#getMasterObserver--">getMasterObserver()</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.MasterSyncObserver.html" title="class in org.apache.hadoop.hbase.snapshot">TestSnapshotClientRetries.MasterSyncObserver</a></dt>
@@ -16914,6 +16932,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html#getMultiGet--">getMultiGet()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html#getMultiPut--">getMultiPut()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/LoadTestTool.html#getMultiThreadedReaderInstance-java.lang.String-org.apache.hadoop.hbase.util.test.LoadTestDataGenerator-">getMultiThreadedReaderInstance(String, LoadTestDataGenerator)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/LoadTestTool.html" title="class in org.apache.hadoop.hbase.util">LoadTestTool</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/LoadTestTool.html#getMultiThreadedUpdaterInstance-java.lang.String-org.apache.hadoop.hbase.util.test.LoadTestDataGenerator-">getMultiThreadedUpdaterInstance(String, LoadTestDataGenerator)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/LoadTestTool.html" title="class in org.apache.hadoop.hbase.util">LoadTestTool</a></dt>
@@ -17174,7 +17194,7 @@
 <div class="block">Uses the TimestampFilter on a Get to request a specified list of
  versions for the row/column specified by rowIdx & colIdx.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestByteBufferKeyValue.html#getOffheapCell-byte:A-byte:A-byte:A-">getOffheapCell(byte[], byte[], byte[])</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">TestByteBufferKeyValue</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestByteBufferKeyValue.html#getOffheapCell-byte:A-byte:A-byte:A-">getOffheapCell(byte[], byte[], byte[])</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">TestByteBufferKeyValue</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestCheckAndMutate.html#getOneRowAndAssertAllButCExist-org.apache.hadoop.hbase.client.Table-">getOneRowAndAssertAllButCExist(Table)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestCheckAndMutate.html" title="class in org.apache.hadoop.hbase.client">TestCheckAndMutate</a></dt>
 <dd>&nbsp;</dd>
@@ -17228,6 +17248,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html#getPeerUUID--">getPeerUUID()</a></span> - Method in class org.apache.hadoop.hbase.client.replication.<a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.client.replication">TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html#getPeerUUID--">getPeerUUID()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html#getPeerUUID--">getPeerUUID()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">SerialReplicationTestBase.LocalReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#getPeerUUID--">getPeerUUID()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.ReplicationEndpointForTest</a></dt>
@@ -22588,6 +22610,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#localities">localities</a></span> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html#LocalReplicationEndpoint--">LocalReplicationEndpoint()</a></span> - Constructor for class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html#LocalReplicationEndpoint--">LocalReplicationEndpoint()</a></span> - Constructor for class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">SerialReplicationTestBase.LocalReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/http/HttpServerFunctionalTest.html#localServerBuilder-java.lang.String-">localServerBuilder(String)</a></span> - Static method in class org.apache.hadoop.hbase.http.<a href="org/apache/hadoop/hbase/http/HttpServerFunctionalTest.html" title="class in org.apache.hadoop.hbase.http">HttpServerFunctionalTest</a></dt>
@@ -23206,6 +23230,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterTransitions.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterTransitions.html" title="class in org.apache.hadoop.hbase.master">TestMasterTransitions</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html" title="class in org.apache.hadoop.hbase.master">TestMetaAssignmentWithStopMaster</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMetaShutdownHandler.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMetaShutdownHandler.html" title="class in org.apache.hadoop.hbase.master">TestMetaShutdownHandler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestRegionPlacement.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestRegionPlacement.html" title="class in org.apache.hadoop.hbase.master">TestRegionPlacement</a></dt>
@@ -23864,6 +23890,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/ProcessBasedLocalHBaseCluster.LocalDaemonLogTailer.html#LOG_FILES">LOG_FILES</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ProcessBasedLocalHBaseCluster.LocalDaemonLogTailer.html" title="class in org.apache.hadoop.hbase.util">ProcessBasedLocalHBaseCluster.LocalDaemonLogTailer</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html#LOG_PATH">LOG_PATH</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/ProcessBasedLocalHBaseCluster.html#LOG_PATH_FORMAT_RE">LOG_PATH_FORMAT_RE</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ProcessBasedLocalHBaseCluster.html" title="class in org.apache.hadoop.hbase.util">ProcessBasedLocalHBaseCluster</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTestLogRollPeriod.html#LOG_ROLL_PERIOD">LOG_ROLL_PERIOD</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTestLogRollPeriod.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractTestLogRollPeriod</a></dt>
@@ -25554,6 +25582,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.VerifyMapper.html#multipleUnevenColumnFamilies">multipleUnevenColumnFamilies</a></span> - Variable in class org.apache.hadoop.hbase.test.<a href="org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.VerifyMapper.html" title="class in org.apache.hadoop.hbase.test">IntegrationTestBigLinkedList.Verify.VerifyMapper</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html#multiPut">multiPut</a></span> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatTestBase.html" title="class in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">MultiTableInputFormatTestBase</span></a> - Class in <a href="org/apache/hadoop/hbase/mapreduce/package-summary.html">org.apache.hadoop.hbase.mapreduce</a></dt>
 <dd>
 <div class="block">Base set of tests and setup for input formats touching multiple tables.</div>
@@ -26975,6 +27005,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/types/TestStruct.html#NULL_SAFE_BYTES_COMPARATOR">NULL_SAFE_BYTES_COMPARATOR</a></span> - Static variable in class org.apache.hadoop.hbase.types.<a href="org/apache/hadoop/hbase/types/TestStruct.html" title="class in org.apache.hadoop.hbase.types">TestStruct</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html#NULL_UUID">NULL_UUID</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestSingleColumnValueFilter.html#nullFilter">nullFilter</a></span> - Variable in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestSingleColumnValueFilter.html" title="class in org.apache.hadoop.hbase.filter">TestSingleColumnValueFilter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationWALEntryFilters.html#nullFilter">nullFilter</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationWALEntryFilters.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationWALEntryFilters</a></dt>
@@ -27567,6 +27599,8 @@
 <dl>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestObservedExceptionsInBatch.html#observedExceptions">observedExceptions</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestObservedExceptionsInBatch.html" title="class in org.apache.hadoop.hbase.regionserver">TestObservedExceptionsInBatch</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.html#observer">observer</a></span> - Static variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestRegionObserverStacking.ObserverA.html#ObserverA--">ObserverA()</a></span> - Constructor for class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestRegionObserverStacking.ObserverA.html" title="class in org.apache.hadoop.hbase.coprocessor">TestRegionObserverStacking.ObserverA</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestRegionObserverStacking.ObserverB.html#ObserverB--">ObserverB()</a></span> - Constructor for class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestRegionObserverStacking.ObserverB.html" title="class in org.apache.hadoop.hbase.coprocessor">TestRegionObserverStacking.ObserverB</a></dt>
@@ -28475,6 +28509,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSinkManager.html#PEER_CLUSTER_ID">PEER_CLUSTER_ID</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSinkManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicationSinkManager</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html#PEER_ID">PEER_ID</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html#PEER_ID">PEER_ID</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationChecker</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html#PEER_ID">PEER_ID</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SerialReplicationTestBase</a></dt>
@@ -28487,6 +28523,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationBase.html#PEER_ID2">PEER_ID2</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html#PEER_UUID">PEER_UUID</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html#PEER_UUID">PEER_UUID</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">SerialReplicationTestBase.LocalReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationSourceDummy.html#peerClusterId">peerClusterId</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSourceDummy.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSourceDummy</a></dt>
@@ -28989,6 +29027,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#postAddRSGroup-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-">postAddRSGroup(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#postAddRSGroup-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-">postAddRSGroup(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#postAddRSGroupCalled">postAddRSGroupCalled</a></span> - Variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/HConnectionTestingUtility.SleepAtFirstRpcCall.html#postAppend-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.client.Append-org.apache.hadoop.hbase.client.Result-">postAppend(ObserverContext&lt;RegionCoprocessorEnvironment&gt;, Append, Result)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/HConnectionTestingUtility.SleepAtFirstRpcCall.html" title="class in org.apache.hadoop.hbase.client">HConnectionTestingUtility.SleepAtFirstRpcCall</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestResultFromCoprocessor.MyObserver.html#postAppend-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.client.Append-org.apache.hadoop.hbase.client.Result-">postAppend(ObserverContext&lt;RegionCoprocessorEnvironment&gt;, Append, Result)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestResultFromCoprocessor.MyObserver.html" title="class in org.apache.hadoop.hbase.client">TestResultFromCoprocessor.MyObserver</a></dt>
@@ -29011,6 +29053,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#postBalanceRSGroup-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-boolean-">postBalanceRSGroup(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, String, boolean)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#postBalanceRSGroup-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-boolean-">postBalanceRSGroup(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, String, boolean)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#postBalanceRSGroupCalled">postBalanceRSGroupCalled</a></span> - Variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#postBalanceSwitch-org.apache.hadoop.hbase.coprocessor.ObserverContext-boolean-boolean-">postBalanceSwitch(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, boolean, boolean)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#postBalanceSwitchCalled">postBalanceSwitchCalled</a></span> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
@@ -29259,10 +29305,22 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#postMoveServers-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.util.Set-java.lang.String-">postMoveServers(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, Set&lt;Address&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#postMoveServers-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.util.Set-java.lang.String-">postMoveServers(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, Set&lt;Address&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#postMoveServersAndTables-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.util.Set-java.util.Set-java.lang.String-">postMoveServersAndTables(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, Set&lt;Address&gt;, Set&lt;TableName&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#postMoveServersAndTables">postMoveServersAndTables</a></span> - Variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#postMoveServersAndTables-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.util.Set-java.util.Set-java.lang.String-">postMoveServersAndTables(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, Set&lt;Address&gt;, Set&lt;TableName&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#postMoveServersCalled">postMoveServersCalled</a></span> - Variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#postMoveTables-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.util.Set-java.lang.String-">postMoveTables(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, Set&lt;TableName&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#postMoveTables-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.util.Set-java.lang.String-">postMoveTables(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, Set&lt;TableName&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#postMoveTablesCalled">postMoveTablesCalled</a></span> - Variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestCITimeout.SleepAndFailFirstTime.html#postOpen-org.apache.hadoop.hbase.coprocessor.ObserverContext-">postOpen(ObserverContext&lt;RegionCoprocessorEnvironment&gt;)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestCITimeout.SleepAndFailFirstTime.html" title="class in org.apache.hadoop.hbase.client">AbstractTestCITimeout.SleepAndFailFirstTime</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/HConnectionTestingUtility.SleepAtFirstRpcCall.html#postOpen-org.apache.hadoop.hbase.coprocessor.ObserverContext-">postOpen(ObserverContext&lt;RegionCoprocessorEnvironment&gt;)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/HConnectionTestingUtility.SleepAtFirstRpcCall.html" title="class in org.apache.hadoop.hbase.client">HConnectionTestingUtility.SleepAtFirstRpcCall</a></dt>
@@ -29299,6 +29357,14 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#postRemoveRSGroup-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-">postRemoveRSGroup(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#postRemoveRSGroup-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-">postRemoveRSGroup(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#postRemoveRSGroupCalled">postRemoveRSGroupCalled</a></span> - Variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#postRemoveServers-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.util.Set-">postRemoveServers(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, Set&lt;Address&gt;)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#postRemoveServersCalled">postRemoveServersCalled</a></span> - Variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html#postReplayWALs-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.fs.Path-">postReplayWALs(ObserverContext&lt;? extends RegionCoprocessorEnvironment&gt;, RegionInfo, Path)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">SimpleRegionObserver</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#postRequestLock-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.RegionInfo:A-java.lang.String-">postRequestLock(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, String, TableName, RegionInfo[], String)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
@@ -29420,6 +29486,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#preAddRSGroup-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-">preAddRSGroup(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#preAddRSGroup-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-">preAddRSGroup(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#preAddRSGroupCalled">preAddRSGroupCalled</a></span> - Variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestFSUtils.html#pReadFile-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">pReadFile(FileSystem, Path)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestFSUtils.html" title="class in org.apache.hadoop.hbase.util">TestFSUtils</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#preAndPostForQueueLockAndHeartbeatLockCalled--">preAndPostForQueueLockAndHeartbeatLockCalled()</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
@@ -29450,6 +29520,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#preBalanceRSGroup-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-">preBalanceRSGroup(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#preBalanceRSGroup-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-">preBalanceRSGroup(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#preBalanceRSGroupCalled">preBalanceRSGroupCalled</a></span> - Variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#preBalanceSwitch-org.apache.hadoop.hbase.coprocessor.ObserverContext-boolean-">preBalanceSwitch(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, boolean)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#preBalanceSwitchCalled">preBalanceSwitchCalled</a></span> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
@@ -29834,10 +29908,22 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#preMoveServers-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.util.Set-java.lang.String-">preMoveServers(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, Set&lt;Address&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#preMoveServers-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.util.Set-java.lang.String-">preMoveServers(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, Set&lt;Address&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#preMoveServersAndTables-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.util.Set-java.util.Set-java.lang.String-">preMoveServersAndTables(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, Set&lt;Address&gt;, Set&lt;TableName&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#preMoveServersAndTables">preMoveServersAndTables</a></span> - Variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#preMoveServersAndTables-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.util.Set-java.util.Set-java.lang.String-">preMoveServersAndTables(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, Set&lt;Address&gt;, Set&lt;TableName&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#preMoveServersCalled">preMoveServersCalled</a></span> - Variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#preMoveTables-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.util.Set-java.lang.String-">preMoveTables(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, Set&lt;TableName&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#preMoveTables-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.util.Set-java.lang.String-">preMoveTables(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, Set&lt;TableName&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#preMoveTablesCalled">preMoveTablesCalled</a></span> - Variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html#preOpen-org.apache.hadoop.hbase.coprocessor.ObserverContext-">preOpen(ObserverContext&lt;RegionCoprocessorEnvironment&gt;)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">SimpleRegionObserver</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.CoprocessorImpl.html#preOpen-org.apache.hadoop.hbase.coprocessor.ObserverContext-">preOpen(ObserverContext&lt;RegionCoprocessorEnvironment&gt;)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.CoprocessorImpl.html" title="class in org.apache.hadoop.hbase.coprocessor">TestCoprocessorInterface.CoprocessorImpl</a></dt>
@@ -29939,6 +30025,14 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#preRemoveRSGroup-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-">preRemoveRSGroup(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#preRemoveRSGroup-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-">preRemoveRSGroup(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, String)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#preRemoveRSGroupCalled">preRemoveRSGroupCalled</a></span> - Variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#preRemoveServers-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.util.Set-">preRemoveServers(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, Set&lt;Address&gt;)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html#preRemoveServersCalled">preRemoveServersCalled</a></span> - Variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroups.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroups.CPMasterObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html#preReplayWALs-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.fs.Path-">preReplayWALs(ObserverContext&lt;? extends RegionCoprocessorEnvironment&gt;, RegionInfo, Path)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">SimpleRegionObserver</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#preRequestLock-org.apache.hadoop.hbase.coprocessor.ObserverContext-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.RegionInfo:A-java.lang.String-">preRequestLock(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, String, TableName, RegionInfo[], String)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
@@ -30685,6 +30779,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHRegion.html#putRows-org.apache.hadoop.hbase.regionserver.HRegion-int-java.lang.String-java.lang.String-">putRows(HRegion, int, String, String)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegion.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegion</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html#puts">puts</a></span> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncSequentialWriteTest</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.SequentialWriteTest.html#puts">puts</a></span> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.SequentialWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.SequentialWriteTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestSeekOptimizations.html#PUTS_PER_ROW_COL">PUTS_PER_ROW_COL</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestSeekOptimizations.html" title="class in org.apache.hadoop.hbase.regionserver">TestSeekOptimizations</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestParallelPut.Putter.html#Putter-org.apache.hadoop.hbase.regionserver.HRegion-int-int-">Putter(HRegion, int, int)</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestParallelPut.Putter.html" title="class in org.apache.hadoop.hbase.regionserver">TestParallelPut.Putter</a></dt>
@@ -32229,6 +32327,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html#replicate-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-">replicate(ReplicationEndpoint.ReplicateContext)</a></span> - Method in class org.apache.hadoop.hbase.client.replication.<a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.client.replication">TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html#replicate-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-">replicate(ReplicationEndpoint.ReplicateContext)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#replicate-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-">replicate(ReplicationEndpoint.ReplicateContext)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html#replicate-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-">replicate(ReplicationEndpoint.ReplicateContext)</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">SerialReplicationTestBase.LocalReplicationEndpoint</a></dt>
@@ -35229,6 +35329,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.html#setConf-org.apache.hadoop.conf.Configuration-">setConf(Configuration)</a></span> - Method in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.html" title="class in org.apache.hadoop.hbase.wal">WALPerformanceEvaluation</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html#setConnCount-int-">setConnCount(int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.html#setConnection-org.apache.hadoop.hbase.client.Connection-">setConnection(Connection)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.html" title="class in org.apache.hadoop.hbase">IntegrationTestDDLMasterFailover</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.MockRecordBuilder.html#setContext-java.lang.String-">setContext(String)</a></span> - Method in class org.apache.hadoop.hbase.test.<a href="org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.MockRecordBuilder.html" title="class in org.apache.hadoop.hbase.test">MetricsAssertHelperImpl.MockRecordBuilder</a></dt>
@@ -35387,6 +35489,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/MultiThreadedReader.html#setMultiGetBatchSize-int-">setMultiGetBatchSize(int)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/MultiThreadedReader.html" title="class in org.apache.hadoop.hbase.util">MultiThreadedReader</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html#setMultiPut-int-">setMultiPut(int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/MultiThreadedWriter.html#setMultiPut-boolean-">setMultiPut(boolean)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/MultiThreadedWriter.html" title="class in org.apache.hadoop.hbase.util">MultiThreadedWriter</a></dt>
 <dd>
 <div class="block">Use multi-puts vs.</div>
@@ -35979,6 +36083,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterTransitions.html#setup--">setup()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterTransitions.html" title="class in org.apache.hadoop.hbase.master">TestMasterTransitions</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html#setUp--">setUp()</a></span> - Static method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html" title="class in org.apache.hadoop.hbase.master">TestMetaAssignmentWithStopMaster</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestShutdownWithNoRegionServer.html#setUp--">setUp()</a></span> - Static method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestShutdownWithNoRegionServer.html" title="class in org.apache.hadoop.hbase.master">TestShutdownWithNoRegionServer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestSplitLogManager.html#setup--">setup()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestSplitLogManager.html" title="class in org.apache.hadoop.hbase.master">TestSplitLogManager</a></dt>
@@ -36886,6 +36992,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSink.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicationSink</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicationSource</a></dt>
@@ -37321,6 +37429,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/TestStressWALProcedureStore.html#setupConfiguration-org.apache.hadoop.conf.Configuration-">setupConfiguration(Configuration)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/TestStressWALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">TestStressWALProcedureStore</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.html#setupConnectionCount-org.apache.hadoop.hbase.PerformanceEvaluation.TestOptions-">setupConnectionCount(PerformanceEvaluation.TestOptions)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseCommonTestingUtility.html#setupDataTestDir--">setupDataTestDir()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseCommonTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseCommonTestingUtility</a></dt>
 <dd>
 <div class="block">Sets up a directory for a test to use.</div>
@@ -38545,6 +38655,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.FailingSplitMasterObserver.html#start-org.apache.hadoop.hbase.CoprocessorEnvironment-">start(CoprocessorEnvironment)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.FailingSplitMasterObserver.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitTransactionOnCluster.FailingSplitMasterObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html#start--">start()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html#start--">start()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">SerialReplicationTestBase.LocalReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#start--">start()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.ReplicationEndpointForTest</a></dt>
@@ -39105,6 +39217,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestWALLockup.DummyServer.html#stop-java.lang.String-">stop(String)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestWALLockup.DummyServer.html" title="class in org.apache.hadoop.hbase.regionserver">TestWALLockup.DummyServer</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html#stop--">stop()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRaceWhenCreatingReplicationSource.LocalReplicationEndpoint</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.DummyServer.html#stop-java.lang.String-">stop(String)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.DummyServer.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicationSourceManager.DummyServer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html#stop--">stop()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/SerialReplicationTestBase.LocalReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">SerialReplicationTestBase.LocalReplicationEndpoint<

<TRUNCATED>

[14/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
index e768c9f..5aa1703 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
@@ -208,256 +208,273 @@
 <span class="sourceLineNo">200</span>      for (RegionInfo region : regions.keySet()) {<a name="line.200"></a>
 <span class="sourceLineNo">201</span>        if (!misplacedRegions.contains(region)) {<a name="line.201"></a>
 <span class="sourceLineNo">202</span>          String groupName = rsGroupInfoManager.getRSGroupOfTable(region.getTable());<a name="line.202"></a>
-<span class="sourceLineNo">203</span>          groupToRegion.put(groupName, region);<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>      // Now the "groupToRegion" map has only the regions which have correct<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      // assignments.<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      for (String key : groupToRegion.keySet()) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        Map&lt;RegionInfo, ServerName&gt; currentAssignmentMap = new TreeMap&lt;RegionInfo, ServerName&gt;();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        List&lt;RegionInfo&gt; regionList = groupToRegion.get(key);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        RSGroupInfo info = rsGroupInfoManager.getRSGroup(key);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        List&lt;ServerName&gt; candidateList = filterOfflineServers(info, servers);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        for (RegionInfo region : regionList) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          currentAssignmentMap.put(region, regions.get(region));<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        if(candidateList.size() &gt; 0) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          assignments.putAll(this.internalBalancer.retainAssignment(<a name="line.217"></a>
-<span class="sourceLineNo">218</span>              currentAssignmentMap, candidateList));<a name="line.218"></a>
+<span class="sourceLineNo">203</span>          if (groupName == null) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>            LOG.info("Group not found for table " + region.getTable() + ", using default");<a name="line.204"></a>
+<span class="sourceLineNo">205</span>            groupName = RSGroupInfo.DEFAULT_GROUP;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>          }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          groupToRegion.put(groupName, region);<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>      // Now the "groupToRegion" map has only the regions which have correct<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      // assignments.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      for (String key : groupToRegion.keySet()) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        Map&lt;RegionInfo, ServerName&gt; currentAssignmentMap = new TreeMap&lt;RegionInfo, ServerName&gt;();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        List&lt;RegionInfo&gt; regionList = groupToRegion.get(key);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        RSGroupInfo info = rsGroupInfoManager.getRSGroup(key);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        List&lt;ServerName&gt; candidateList = filterOfflineServers(info, servers);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        for (RegionInfo region : regionList) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          currentAssignmentMap.put(region, regions.get(region));<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><a name="line.221"></a>
-<span class="sourceLineNo">222</span>      for (RegionInfo region : misplacedRegions) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        String groupName = rsGroupInfoManager.getRSGroupOfTable(region.getTable());<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        RSGroupInfo info = rsGroupInfoManager.getRSGroup(groupName);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        List&lt;ServerName&gt; candidateList = filterOfflineServers(info, servers);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        ServerName server = this.internalBalancer.randomAssignment(region,<a name="line.226"></a>
-<span class="sourceLineNo">227</span>            candidateList);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        if (server != null) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          if (!assignments.containsKey(server)) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>            assignments.put(server, new ArrayList&lt;&gt;());<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          }<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          assignments.get(server).add(region);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        } else {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          //if not server is available assign to bogus so it ends up in RIT<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          if(!assignments.containsKey(LoadBalancer.BOGUS_SERVER_NAME)) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>            assignments.put(LoadBalancer.BOGUS_SERVER_NAME, new ArrayList&lt;&gt;());<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          assignments.get(LoadBalancer.BOGUS_SERVER_NAME).add(region);<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>      return assignments;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    } catch (IOException e) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      throw new HBaseIOException("Failed to do online retain assignment", e);<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><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  @Override<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public ServerName randomAssignment(RegionInfo region,<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      List&lt;ServerName&gt; servers) throws HBaseIOException {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    ListMultimap&lt;String,RegionInfo&gt; regionMap = LinkedListMultimap.create();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    ListMultimap&lt;String,ServerName&gt; serverMap = LinkedListMultimap.create();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    generateGroupMaps(Lists.newArrayList(region), servers, regionMap, serverMap);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    List&lt;ServerName&gt; filteredServers = serverMap.get(regionMap.keySet().iterator().next());<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    return this.internalBalancer.randomAssignment(region, filteredServers);<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>  private void generateGroupMaps(<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    List&lt;RegionInfo&gt; regions,<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    List&lt;ServerName&gt; servers,<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    ListMultimap&lt;String, RegionInfo&gt; regionMap,<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    ListMultimap&lt;String, ServerName&gt; serverMap) throws HBaseIOException {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    try {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      for (RegionInfo region : regions) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        String groupName = rsGroupInfoManager.getRSGroupOfTable(region.getTable());<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        if (groupName == null) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          LOG.warn("Group for table "+region.getTable()+" is null");<a name="line.266"></a>
-<span class="sourceLineNo">267</span>        }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        regionMap.put(groupName, region);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      }<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      for (String groupKey : regionMap.keySet()) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        RSGroupInfo info = rsGroupInfoManager.getRSGroup(groupKey);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        serverMap.putAll(groupKey, filterOfflineServers(info, servers));<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        if(serverMap.get(groupKey).size() &lt; 1) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>          serverMap.put(groupKey, LoadBalancer.BOGUS_SERVER_NAME);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    } catch(IOException e) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      throw new HBaseIOException("Failed to generate group maps", e);<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>  private List&lt;ServerName&gt; filterOfflineServers(RSGroupInfo RSGroupInfo,<a name="line.282"></a>
-<span class="sourceLineNo">283</span>                                                List&lt;ServerName&gt; onlineServers) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    if (RSGroupInfo != null) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      return filterServers(RSGroupInfo.getServers(), onlineServers);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    } else {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      LOG.warn("RSGroup Information found to be null. Some regions might be unassigned.");<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      return Collections.EMPTY_LIST;<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><a name="line.291"></a>
-<span class="sourceLineNo">292</span>  /**<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * Filter servers based on the online servers.<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   *<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * @param servers<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   *          the servers<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @param onlineServers<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   *          List of servers which are online.<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * @return the list<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   */<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  private List&lt;ServerName&gt; filterServers(Set&lt;Address&gt; servers,<a name="line.301"></a>
-<span class="sourceLineNo">302</span>                                         List&lt;ServerName&gt; onlineServers) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span>     * servers is actually a TreeSet (see {@link org.apache.hadoop.hbase.rsgroup.RSGroupInfo}),<a name="line.304"></a>
-<span class="sourceLineNo">305</span>     * having its contains()'s time complexity as O(logn), which is good enough.<a name="line.305"></a>
-<span class="sourceLineNo">306</span>     * TODO: consider using HashSet to pursue O(1) for contains() throughout the calling chain<a name="line.306"></a>
-<span class="sourceLineNo">307</span>     * if needed. */<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    ArrayList&lt;ServerName&gt; finalList = new ArrayList&lt;&gt;();<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    for (ServerName onlineServer : onlineServers) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      if (servers.contains(onlineServer.getAddress())) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        finalList.add(onlineServer);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span>    return finalList;<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>  @VisibleForTesting<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  public Set&lt;RegionInfo&gt; getMisplacedRegions(<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      Map&lt;RegionInfo, ServerName&gt; regions) throws IOException {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    Set&lt;RegionInfo&gt; misplacedRegions = new HashSet&lt;&gt;();<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    for(Map.Entry&lt;RegionInfo, ServerName&gt; region : regions.entrySet()) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      RegionInfo regionInfo = region.getKey();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      ServerName assignedServer = region.getValue();<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      RSGroupInfo info = rsGroupInfoManager.getRSGroup(rsGroupInfoManager.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>              getRSGroupOfTable(regionInfo.getTable()));<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      if (assignedServer == null) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        LOG.debug("There is no assigned server for {}", region);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        continue;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      RSGroupInfo otherInfo = rsGroupInfoManager.getRSGroupOfServer(assignedServer.getAddress());<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      if (info == null &amp;&amp; otherInfo == null) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        LOG.warn("Couldn't obtain rs group information for {} on {}", region, assignedServer);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        continue;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      }<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      if ((info == null || !info.containsServer(assignedServer.getAddress()))) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        LOG.debug("Found misplaced region: " + regionInfo.getRegionNameAsString() +<a name="line.337"></a>
-<span class="sourceLineNo">338</span>            " on server: " + assignedServer +<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            " found in group: " +  otherInfo +<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            " outside of group: " + (info == null ? "UNKNOWN" : info.getName()));<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        misplacedRegions.add(regionInfo);<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>    return misplacedRegions;<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>  private Pair&lt;Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;, List&lt;RegionPlan&gt;&gt; correctAssignments(<a name="line.347"></a>
-<span class="sourceLineNo">348</span>       Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; existingAssignments)<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  throws HBaseIOException{<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    // To return<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; correctAssignments = new TreeMap&lt;&gt;();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    List&lt;RegionPlan&gt; regionPlansForMisplacedRegions = new ArrayList&lt;&gt;();<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments : existingAssignments.entrySet()){<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      ServerName currentHostServer = assignments.getKey();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      correctAssignments.put(currentHostServer, new LinkedList&lt;&gt;());<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      List&lt;RegionInfo&gt; regions = assignments.getValue();<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      for (RegionInfo region : regions) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        RSGroupInfo targetRSGInfo = null;<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        try {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          targetRSGInfo = rsGroupInfoManager.getRSGroup(<a name="line.361"></a>
-<span class="sourceLineNo">362</span>              rsGroupInfoManager.getRSGroupOfTable(region.getTable()));<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        } catch (IOException exp) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          LOG.debug("RSGroup information null for region of table " + region.getTable(),<a name="line.364"></a>
-<span class="sourceLineNo">365</span>              exp);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>        }<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        if (targetRSGInfo == null ||<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            !targetRSGInfo.containsServer(currentHostServer.getAddress())) { // region is mis-placed<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          regionPlansForMisplacedRegions.add(new RegionPlan(region, currentHostServer, null));<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        } else { // region is placed as expected<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          correctAssignments.get(currentHostServer).add(region);<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>    }<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>    // Return correct assignments and region movement plan for mis-placed regions together<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    return new Pair&lt;Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;, List&lt;RegionPlan&gt;&gt;(<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        correctAssignments, regionPlansForMisplacedRegions);<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>  @Override<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  public void initialize() throws HBaseIOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    try {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      if (rsGroupInfoManager == null) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        List&lt;RSGroupAdminEndpoint&gt; cps =<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          masterServices.getMasterCoprocessorHost().findCoprocessors(RSGroupAdminEndpoint.class);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        if (cps.size() != 1) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>          String msg = "Expected one implementation of GroupAdminEndpoint but found " + cps.size();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>          LOG.error(msg);<a name="line.389"></a>
-<span class="sourceLineNo">390</span>          throw new HBaseIOException(msg);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        }<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        rsGroupInfoManager = cps.get(0).getGroupInfoManager();<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        if(rsGroupInfoManager == null){<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          String msg = "RSGroupInfoManager hasn't been initialized";<a name="line.394"></a>
-<span class="sourceLineNo">395</span>          LOG.error(msg);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          throw new HBaseIOException(msg);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        }<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        rsGroupInfoManager.start();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    } catch (IOException e) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      throw new HBaseIOException("Failed to initialize GroupInfoManagerImpl", e);<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>    // Create the balancer<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    Class&lt;? extends LoadBalancer&gt; balancerKlass = config.getClass(HBASE_RSGROUP_LOADBALANCER_CLASS,<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        StochasticLoadBalancer.class, LoadBalancer.class);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    internalBalancer = ReflectionUtils.newInstance(balancerKlass, config);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    internalBalancer.setMasterServices(masterServices);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    internalBalancer.setClusterMetrics(clusterStatus);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    internalBalancer.setConf(config);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    internalBalancer.initialize();<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>  public boolean isOnline() {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    if (this.rsGroupInfoManager == null) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      return false;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>    return this.rsGroupInfoManager.isOnline();<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>  @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  public void setClusterLoad(Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; clusterLoad) {<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 void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>  @Override<a name="line.430"></a>
-<span class="sourceLineNo">431</span>  public void regionOffline(RegionInfo regionInfo) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>  @Override<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  public void onConfigurationChange(Configuration conf) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    //DO nothing for now<a name="line.436"></a>
+<span class="sourceLineNo">220</span>        if(candidateList.size() &gt; 0) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          assignments.putAll(this.internalBalancer.retainAssignment(<a name="line.221"></a>
+<span class="sourceLineNo">222</span>              currentAssignmentMap, candidateList));<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><a name="line.225"></a>
+<span class="sourceLineNo">226</span>      for (RegionInfo region : misplacedRegions) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        String groupName = rsGroupInfoManager.getRSGroupOfTable(region.getTable());<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        if (groupName == null) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>          LOG.info("Group not found for table " + region.getTable() + ", using default");<a name="line.229"></a>
+<span class="sourceLineNo">230</span>          groupName = RSGroupInfo.DEFAULT_GROUP;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        RSGroupInfo info = rsGroupInfoManager.getRSGroup(groupName);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        List&lt;ServerName&gt; candidateList = filterOfflineServers(info, servers);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        ServerName server = this.internalBalancer.randomAssignment(region,<a name="line.234"></a>
+<span class="sourceLineNo">235</span>            candidateList);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        if (server != null) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          if (!assignments.containsKey(server)) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>            assignments.put(server, new ArrayList&lt;&gt;());<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>          assignments.get(server).add(region);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        } else {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          //if not server is available assign to bogus so it ends up in RIT<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          if(!assignments.containsKey(LoadBalancer.BOGUS_SERVER_NAME)) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>            assignments.put(LoadBalancer.BOGUS_SERVER_NAME, new ArrayList&lt;&gt;());<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          }<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          assignments.get(LoadBalancer.BOGUS_SERVER_NAME).add(region);<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>      return assignments;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    } catch (IOException e) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      throw new HBaseIOException("Failed to do online retain assignment", e);<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>  @Override<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  public ServerName randomAssignment(RegionInfo region,<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      List&lt;ServerName&gt; servers) throws HBaseIOException {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    ListMultimap&lt;String,RegionInfo&gt; regionMap = LinkedListMultimap.create();<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    ListMultimap&lt;String,ServerName&gt; serverMap = LinkedListMultimap.create();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    generateGroupMaps(Lists.newArrayList(region), servers, regionMap, serverMap);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    List&lt;ServerName&gt; filteredServers = serverMap.get(regionMap.keySet().iterator().next());<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return this.internalBalancer.randomAssignment(region, filteredServers);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  private void generateGroupMaps(<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    List&lt;RegionInfo&gt; regions,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    List&lt;ServerName&gt; servers,<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    ListMultimap&lt;String, RegionInfo&gt; regionMap,<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    ListMultimap&lt;String, ServerName&gt; serverMap) throws HBaseIOException {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    try {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      for (RegionInfo region : regions) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        String groupName = rsGroupInfoManager.getRSGroupOfTable(region.getTable());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        if (groupName == null) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>          LOG.info("Group not found for table " + region.getTable() + ", using default");<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          groupName = RSGroupInfo.DEFAULT_GROUP;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        regionMap.put(groupName, region);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      }<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      for (String groupKey : regionMap.keySet()) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        RSGroupInfo info = rsGroupInfoManager.getRSGroup(groupKey);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        serverMap.putAll(groupKey, filterOfflineServers(info, servers));<a name="line.281"></a>
+<span class="sourceLineNo">282</span>        if(serverMap.get(groupKey).size() &lt; 1) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          serverMap.put(groupKey, LoadBalancer.BOGUS_SERVER_NAME);<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>    } catch(IOException e) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      throw new HBaseIOException("Failed to generate group maps", e);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span>  private List&lt;ServerName&gt; filterOfflineServers(RSGroupInfo RSGroupInfo,<a name="line.291"></a>
+<span class="sourceLineNo">292</span>                                                List&lt;ServerName&gt; onlineServers) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    if (RSGroupInfo != null) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      return filterServers(RSGroupInfo.getServers(), onlineServers);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    } else {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      LOG.warn("RSGroup Information found to be null. Some regions might be unassigned.");<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      return Collections.EMPTY_LIST;<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>   * Filter servers based on the online servers.<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   *<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * @param servers<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   *          the servers<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * @param onlineServers<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   *          List of servers which are online.<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * @return the list<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   */<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  private List&lt;ServerName&gt; filterServers(Set&lt;Address&gt; servers,<a name="line.310"></a>
+<span class="sourceLineNo">311</span>                                         List&lt;ServerName&gt; onlineServers) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    /**<a name="line.312"></a>
+<span class="sourceLineNo">313</span>     * servers is actually a TreeSet (see {@link org.apache.hadoop.hbase.rsgroup.RSGroupInfo}),<a name="line.313"></a>
+<span class="sourceLineNo">314</span>     * having its contains()'s time complexity as O(logn), which is good enough.<a name="line.314"></a>
+<span class="sourceLineNo">315</span>     * TODO: consider using HashSet to pursue O(1) for contains() throughout the calling chain<a name="line.315"></a>
+<span class="sourceLineNo">316</span>     * if needed. */<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    ArrayList&lt;ServerName&gt; finalList = new ArrayList&lt;&gt;();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    for (ServerName onlineServer : onlineServers) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      if (servers.contains(onlineServer.getAddress())) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        finalList.add(onlineServer);<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>    return finalList;<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>  @VisibleForTesting<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  public Set&lt;RegionInfo&gt; getMisplacedRegions(<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      Map&lt;RegionInfo, ServerName&gt; regions) throws IOException {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    Set&lt;RegionInfo&gt; misplacedRegions = new HashSet&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    for(Map.Entry&lt;RegionInfo, ServerName&gt; region : regions.entrySet()) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      RegionInfo regionInfo = region.getKey();<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      ServerName assignedServer = region.getValue();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      String groupName = rsGroupInfoManager.getRSGroupOfTable(regionInfo.getTable());<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      if (groupName == null) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        LOG.info("Group not found for table " + regionInfo.getTable() + ", using default");<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        groupName = RSGroupInfo.DEFAULT_GROUP;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      RSGroupInfo info = rsGroupInfoManager.getRSGroup(groupName);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      if (assignedServer == null) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        LOG.debug("There is no assigned server for {}", region);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        continue;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      }<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      RSGroupInfo otherInfo = rsGroupInfoManager.getRSGroupOfServer(assignedServer.getAddress());<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      if (info == null &amp;&amp; otherInfo == null) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        LOG.warn("Couldn't obtain rs group information for {} on {}", region, assignedServer);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        continue;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      if ((info == null || !info.containsServer(assignedServer.getAddress()))) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>        LOG.debug("Found misplaced region: " + regionInfo.getRegionNameAsString() +<a name="line.350"></a>
+<span class="sourceLineNo">351</span>            " on server: " + assignedServer +<a name="line.351"></a>
+<span class="sourceLineNo">352</span>            " found in group: " +  otherInfo +<a name="line.352"></a>
+<span class="sourceLineNo">353</span>            " outside of group: " + (info == null ? "UNKNOWN" : info.getName()));<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        misplacedRegions.add(regionInfo);<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>    return misplacedRegions;<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>  private Pair&lt;Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;, List&lt;RegionPlan&gt;&gt; correctAssignments(<a name="line.360"></a>
+<span class="sourceLineNo">361</span>       Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; existingAssignments)<a name="line.361"></a>
+<span class="sourceLineNo">362</span>  throws HBaseIOException{<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    // To return<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; correctAssignments = new TreeMap&lt;&gt;();<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    List&lt;RegionPlan&gt; regionPlansForMisplacedRegions = new ArrayList&lt;&gt;();<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments : existingAssignments.entrySet()){<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      ServerName currentHostServer = assignments.getKey();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      correctAssignments.put(currentHostServer, new LinkedList&lt;&gt;());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      List&lt;RegionInfo&gt; regions = assignments.getValue();<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      for (RegionInfo region : regions) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        RSGroupInfo targetRSGInfo = null;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        try {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>          String groupName = rsGroupInfoManager.getRSGroupOfTable(region.getTable());<a name="line.374"></a>
+<span class="sourceLineNo">375</span>          if (groupName == null) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>            LOG.info("Group not found for table " + region.getTable() + ", using default");<a name="line.376"></a>
+<span class="sourceLineNo">377</span>            groupName = RSGroupInfo.DEFAULT_GROUP;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>          }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          targetRSGInfo = rsGroupInfoManager.getRSGroup(groupName);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        } catch (IOException exp) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          LOG.debug("RSGroup information null for region of table " + region.getTable(),<a name="line.381"></a>
+<span class="sourceLineNo">382</span>              exp);<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        }<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        if (targetRSGInfo == null ||<a name="line.384"></a>
+<span class="sourceLineNo">385</span>            !targetRSGInfo.containsServer(currentHostServer.getAddress())) { // region is mis-placed<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          regionPlansForMisplacedRegions.add(new RegionPlan(region, currentHostServer, null));<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        } else { // region is placed as expected<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          correctAssignments.get(currentHostServer).add(region);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>        }<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>    // Return correct assignments and region movement plan for mis-placed regions together<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    return new Pair&lt;Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;, List&lt;RegionPlan&gt;&gt;(<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        correctAssignments, regionPlansForMisplacedRegions);<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 void initialize() throws HBaseIOException {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      if (rsGroupInfoManager == null) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        List&lt;RSGroupAdminEndpoint&gt; cps =<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          masterServices.getMasterCoprocessorHost().findCoprocessors(RSGroupAdminEndpoint.class);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        if (cps.size() != 1) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          String msg = "Expected one implementation of GroupAdminEndpoint but found " + cps.size();<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          LOG.error(msg);<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          throw new HBaseIOException(msg);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        }<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        rsGroupInfoManager = cps.get(0).getGroupInfoManager();<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        if(rsGroupInfoManager == null){<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          String msg = "RSGroupInfoManager hasn't been initialized";<a name="line.411"></a>
+<span class="sourceLineNo">412</span>          LOG.error(msg);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>          throw new HBaseIOException(msg);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        rsGroupInfoManager.start();<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      }<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    } catch (IOException e) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      throw new HBaseIOException("Failed to initialize GroupInfoManagerImpl", e);<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>    // Create the balancer<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    Class&lt;? extends LoadBalancer&gt; balancerKlass = config.getClass(HBASE_RSGROUP_LOADBALANCER_CLASS,<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        StochasticLoadBalancer.class, LoadBalancer.class);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    internalBalancer = ReflectionUtils.newInstance(balancerKlass, config);<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    internalBalancer.setMasterServices(masterServices);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    internalBalancer.setClusterMetrics(clusterStatus);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    internalBalancer.setConf(config);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    internalBalancer.initialize();<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>  public boolean isOnline() {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    if (this.rsGroupInfoManager == null) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      return false;<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>    return this.rsGroupInfoManager.isOnline();<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 void stop(String why) {<a name="line.440"></a>
+<span class="sourceLineNo">440</span>  public void setClusterLoad(Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; clusterLoad) {<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>  @Override<a name="line.443"></a>
-<span class="sourceLineNo">444</span>  public boolean isStopped() {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    return false;<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>  @VisibleForTesting<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  public void setRsGroupInfoManager(RSGroupInfoManager rsGroupInfoManager) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    this.rsGroupInfoManager = rsGroupInfoManager;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  }<a name="line.451"></a>
-<span class="sourceLineNo">452</span>}<a name="line.452"></a>
+<span class="sourceLineNo">444</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<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>  @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span>  public void regionOffline(RegionInfo regionInfo) {<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 void onConfigurationChange(Configuration conf) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    //DO nothing for now<a name="line.453"></a>
+<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>  @Override<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  public void stop(String why) {<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>  @Override<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  public boolean isStopped() {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    return false;<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>  @VisibleForTesting<a name="line.465"></a>
+<span class="sourceLineNo">466</span>  public void setRsGroupInfoManager(RSGroupInfoManager rsGroupInfoManager) {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>    this.rsGroupInfoManager = rsGroupInfoManager;<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>
 
 
 


[25/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
index 9644187..b979909 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
@@ -1199,2602 +1199,2599 @@
 <span class="sourceLineNo">1191</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1191"></a>
 <span class="sourceLineNo">1192</span>    try {<a name="line.1192"></a>
 <span class="sourceLineNo">1193</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>      ServerName sn = ServerName.parseVersionedServerName(this.serverName.getVersionedBytes());<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      request.setServer(ProtobufUtil.toServerName(sn));<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>      request.setLoad(sl);<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>      rss.regionServerReport(null, request.build());<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>    } catch (ServiceException se) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>        // This will be caught and handled as a fatal error in run()<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>        throw ioe;<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>      }<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>      if (rssStub == rss) {<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>        rssStub = null;<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      }<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>      // Method blocks until new master is found or we are stopped<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      createRegionServerStatusStub(true);<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>    }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>  }<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span><a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>  /**<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>   *<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>   * @param regionSizeStore The store containing region sizes<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>   */<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>    if (rss == null) {<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>      // the current server could be stopping.<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      return true;<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    }<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>    try {<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>    } catch (ServiceException se) {<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>            + " This will be retried.", ioe);<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>        return true;<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      }<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      if (rssStub == rss) {<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>        rssStub = null;<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>      }<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>      createRegionServerStatusStub(true);<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>            return false;<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>          }<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>        }<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      }<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    }<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    return true;<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>  }<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>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>   *<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>   * @param rss The stub to send to the Master<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>   * @param regionSizeStore The store containing region sizes<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>   */<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>  void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    RegionSpaceUseReportRequest request =<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    // Record the number of size reports sent<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>    if (metricsRegionServer != null) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    }<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>  }<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span><a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>  /**<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>   *<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>   * @param regionSizeStore The size in bytes of regions<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>   * @return The corresponding protocol buffer message.<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>   */<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    }<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>    return request.build();<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>  }<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span><a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>  /**<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>   * protobuf message.<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>   *<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>   * @param regionInfo The RegionInfo<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>   * @return The protocol buffer<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>   */<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    return RegionSpaceUse.newBuilder()<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>        .build();<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>  ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>      throws IOException {<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>    // the wrapper to compute those numbers in one place.<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    // history.<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>    long usedMemory = -1L;<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>    long maxMemory = -1L;<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>    if (usage != null) {<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>      usedMemory = usage.getUsed();<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>      maxMemory = usage.getMax();<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>    }<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span><a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>    for (String coprocessor : coprocessors) {<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>    }<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    for (HRegion region : regions) {<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>      if (region.getCoprocessorHost() != null) {<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>        Iterator&lt;String&gt; iterator = regionCoprocessors.iterator();<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>        while (iterator.hasNext()) {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(iterator.next()).build());<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>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>          .getCoprocessors()) {<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<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>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    if (this.infoServer != null) {<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    } else {<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>      serverLoad.setInfoServerPort(-1);<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>    // for the replicationLoad purpose. Only need to get from one executorService<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    // either source or sink will get the same info<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    ReplicationSourceService rsources = getReplicationSourceService();<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span><a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>    if (rsources != null) {<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>      // always refresh first to get the latest value<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>      ReplicationLoad rLoad = rsources.refreshAndGetReplicationLoad();<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>      if (rLoad != null) {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad.getReplicationLoadSourceList()) {<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>        }<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>      }<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>    }<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span><a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>    return serverLoad.build();<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>  }<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span><a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>  String getOnlineRegionsAsPrintableString() {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    StringBuilder sb = new StringBuilder();<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    }<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    return sb.toString();<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>  }<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>  /**<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>   * Wait on regions close.<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>   */<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    // Wait till all regions are closed before going out.<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    int lastCount = -1;<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    long previousLogTime = 0;<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    boolean interrupted = false;<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    try {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      while (!isOnlineRegionsEmpty()) {<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        int count = getNumberOfOnlineRegions();<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>        // Only print a message if the count of regions has changed.<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>        if (count != lastCount) {<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>          // Log every second at most<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>            previousLogTime = System.currentTimeMillis();<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>            lastCount = count;<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>            // Only print out regions still closing if a small number else will<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>            // swamp the log.<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>            }<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>          }<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>        }<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>        // protect against the case where an open comes in after we start the<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        // iterator of onlineRegions to close all user regions.<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>            closedRegions.add(hri.getEncodedName());<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>            // Don't update zk with this close transition; pass false.<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>            closeRegionIgnoreErrors(hri, abort);<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>        // No regions in RIT, we could stop waiting now.<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>          if (!isOnlineRegionsEmpty()) {<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>                " because some regions failed closing");<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>          }<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>          break;<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>        }<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>        if (sleep(200)) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>          interrupted = true;<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>        }<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>      }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>    } finally {<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      if (interrupted) {<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>        Thread.currentThread().interrupt();<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>  }<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span><a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  private boolean sleep(long millis) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    boolean interrupted = false;<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>    try {<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      Thread.sleep(millis);<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>    } catch (InterruptedException e) {<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      LOG.warn("Interrupted while sleeping");<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      interrupted = true;<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>    }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>    return interrupted;<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>  }<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span><a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>  private void shutdownWAL(final boolean close) {<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>    if (this.walFactory != null) {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      try {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (close) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          walFactory.close();<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        } else {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>          walFactory.shutdown();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      } catch (Throwable e) {<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      }<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    }<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>  /*<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>   *<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>   * @param c Extra configuration.<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>   */<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  throws IOException {<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>    try {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>      boolean updateRootDir = false;<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        String key = e.getName();<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        // The hostname the master sees us as.<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>              this.startcode);<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>            LOG.error(msg);<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>            throw new IOException(msg);<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          }<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>            LOG.error(msg);<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>          }<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>          continue;<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>        }<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span><a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>        String value = e.getValue();<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>            updateRootDir = true;<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><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>        if (LOG.isDebugEnabled()) {<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>        }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>        this.conf.set(key, value);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      }<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>      createMyEphemeralNode();<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>      if (updateRootDir) {<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>        initializeFileSystem();<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>      }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span><a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<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>      // Save it in a file, this will allow to see if we crash<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span><a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      setupWALAndReplication();<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          new MetricsRegionServerWrapperImpl(this), conf);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>      this.metricsTable = new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      pauseMonitor.start();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span><a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        startServices();<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      }<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>      // or make sense of it.<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      startReplicationService();<a name="line.1543"></a>
+<span class="sourceLineNo">1194</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>      request.setLoad(sl);<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>      rss.regionServerReport(null, request.build());<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    } catch (ServiceException se) {<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>        // This will be caught and handled as a fatal error in run()<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>        throw ioe;<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>      }<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>      if (rssStub == rss) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>        rssStub = null;<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>      }<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>      // Method blocks until new master is found or we are stopped<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>      createRegionServerStatusStub(true);<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>    }<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>  }<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span><a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>  /**<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>   *<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>   * @param regionSizeStore The store containing region sizes<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>   */<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>    if (rss == null) {<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      // the current server could be stopping.<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>      return true;<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>    }<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    try {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>    } catch (ServiceException se) {<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>            + " This will be retried.", ioe);<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>        return true;<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>      }<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>      if (rssStub == rss) {<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>        rssStub = null;<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      }<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>      createRegionServerStatusStub(true);<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>            return false;<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>          }<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>        }<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>      }<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>    }<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>    return true;<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>  }<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span><a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>  /**<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>   *<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>   * @param rss The stub to send to the Master<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>   * @param regionSizeStore The store containing region sizes<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>   */<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>  void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>    RegionSpaceUseReportRequest request =<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>    // Record the number of size reports sent<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>    if (metricsRegionServer != null) {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<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><a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>  /**<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>   *<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>   * @param regionSizeStore The size in bytes of regions<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>   * @return The corresponding protocol buffer message.<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>   */<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>    return request.build();<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>  /**<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>   * protobuf message.<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>   *<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>   * @param regionInfo The RegionInfo<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   * @return The protocol buffer<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>   */<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>    return RegionSpaceUse.newBuilder()<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>        .build();<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>  ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      throws IOException {<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>    // the wrapper to compute those numbers in one place.<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    // history.<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>    long usedMemory = -1L;<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    long maxMemory = -1L;<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>    if (usage != null) {<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>      usedMemory = usage.getUsed();<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>      maxMemory = usage.getMax();<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>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>    for (String coprocessor : coprocessors) {<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>    }<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>    for (HRegion region : regions) {<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>      if (region.getCoprocessorHost() != null) {<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>        Iterator&lt;String&gt; iterator = regionCoprocessors.iterator();<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>        while (iterator.hasNext()) {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(iterator.next()).build());<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>        }<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>      }<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>          .getCoprocessors()) {<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>      }<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>    }<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>    if (this.infoServer != null) {<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>    } else {<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>      serverLoad.setInfoServerPort(-1);<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>    // for the replicationLoad purpose. Only need to get from one executorService<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>    // either source or sink will get the same info<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>    ReplicationSourceService rsources = getReplicationSourceService();<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span><a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>    if (rsources != null) {<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>      // always refresh first to get the latest value<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>      ReplicationLoad rLoad = rsources.refreshAndGetReplicationLoad();<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>      if (rLoad != null) {<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad.getReplicationLoadSourceList()) {<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>        }<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>      }<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>    }<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span><a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>    return serverLoad.build();<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>  }<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span><a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>  String getOnlineRegionsAsPrintableString() {<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>    StringBuilder sb = new StringBuilder();<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>    }<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>    return sb.toString();<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>  }<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span><a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>  /**<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>   * Wait on regions close.<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>   */<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>    // Wait till all regions are closed before going out.<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>    int lastCount = -1;<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>    long previousLogTime = 0;<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>    boolean interrupted = false;<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>    try {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>      while (!isOnlineRegionsEmpty()) {<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>        int count = getNumberOfOnlineRegions();<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>        // Only print a message if the count of regions has changed.<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>        if (count != lastCount) {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>          // Log every second at most<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>            previousLogTime = System.currentTimeMillis();<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>            lastCount = count;<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>            // Only print out regions still closing if a small number else will<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>            // swamp the log.<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>            }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>          }<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>        }<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>        // protect against the case where an open comes in after we start the<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>        // iterator of onlineRegions to close all user regions.<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>            closedRegions.add(hri.getEncodedName());<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>            // Don't update zk with this close transition; pass false.<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>            closeRegionIgnoreErrors(hri, abort);<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>        // No regions in RIT, we could stop waiting now.<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>          if (!isOnlineRegionsEmpty()) {<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>                " because some regions failed closing");<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>          }<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>          break;<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>        }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>        if (sleep(200)) {<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>          interrupted = true;<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>        }<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      }<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>    } finally {<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>      if (interrupted) {<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>        Thread.currentThread().interrupt();<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><a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>  private boolean sleep(long millis) {<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>    boolean interrupted = false;<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    try {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>      Thread.sleep(millis);<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>    } catch (InterruptedException e) {<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      LOG.warn("Interrupted while sleeping");<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      interrupted = true;<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>    return interrupted;<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>  }<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span><a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>  private void shutdownWAL(final boolean close) {<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    if (this.walFactory != null) {<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>      try {<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>        if (close) {<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>          walFactory.close();<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        } else {<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>          walFactory.shutdown();<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>        }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>      } catch (Throwable e) {<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>      }<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    }<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>  }<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span><a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>  /*<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>   *<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>   * @param c Extra configuration.<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>   */<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>  throws IOException {<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>    try {<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      boolean updateRootDir = false;<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>        String key = e.getName();<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        // The hostname the master sees us as.<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>              this.startcode);<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>            LOG.error(msg);<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>            throw new IOException(msg);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>          }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>            LOG.error(msg);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>          }<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>          continue;<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>        }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span><a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>        String value = e.getValue();<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>            updateRootDir = true;<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>        if (LOG.isDebugEnabled()) {<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>        }<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>        this.conf.set(key, value);<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      createMyEphemeralNode();<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span><a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>      if (updateRootDir) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        initializeFileSystem();<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>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>      }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span><a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      // Save it in a file, this will allow to see if we crash<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span><a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      setupWALAndReplication();<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>          new MetricsRegionServerWrapperImpl(this), conf);<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      this.metricsTable = new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      pauseMonitor.start();<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span><a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>        startServices();<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>      }<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      // or make sense of it.<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      startReplicationService();<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span><a name="line.1543"></a>
 <span class="sourceLineNo">1544</span><a name="line.1544"></a>
-<span class="sourceLineNo">1545</span><a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      // Set up ZK<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.isa +<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          ", sessionid=0x" +<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>      // Wake up anyone waiting for this server to online<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>      synchronized (online) {<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>        online.set(true);<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>        online.notifyAll();<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>      }<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>    } catch (Throwable e) {<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>      stop("Failed initialization");<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"),<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          "Region server startup failed");<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    } finally {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      sleeper.skipSleepCycle();<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>  protected void initializeMemStoreChunkCreator() {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    if (MemStoreLAB.isEnabled(conf)) {<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      // MSLAB is enabled. So initialize MemStoreChunkPool<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      // By this time, the MemstoreFlusher is already initialized. We can get the global limits from<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      // it.<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      Pair&lt;Long, MemoryType&gt; pair = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      long globalMemStoreSize = pair.getFirst();<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      boolean offheap = this.regionServerAccounting.isOffheap();<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>      // When off heap memstore in use, take full area for chunk pool.<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      float poolSizePercentage = offheap? 1.0F:<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>          conf.getFloat(MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY, MemStoreLAB.POOL_MAX_SIZE_DEFAULT);<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>      float initialCountPercentage = conf.getFloat(MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY,<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          MemStoreLAB.POOL_INITIAL_SIZE_DEFAULT);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>      int chunkSize = conf.getInt(MemStoreLAB.CHUNK_SIZE_KEY, MemStoreLAB.CHUNK_SIZE_DEFAULT);<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // init the chunkCreator<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      ChunkCreator chunkCreator =<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>          ChunkCreator.initialize(chunkSize, offheap, globalMemStoreSize, poolSizePercentage,<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      initialCountPercentage, this.hMemManager);<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    }<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>  }<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span><a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>  private void startHeapMemoryManager() {<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>    this.hMemManager = HeapMemoryManager.create(this.conf, this.cacheFlusher, this,<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>        this.regionServerAccounting);<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>    if (this.hMemManager != null) {<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      this.hMemManager.start(getChoreService());<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>    }<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span><a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>  private void createMyEphemeralNode() throws KeeperException, IOException {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>  }<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span><a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>  }<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span><a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  @Override<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    return regionServerAccounting;<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>  }<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span><a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  /*<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>   * @param r Region to get RegionLoad for.<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * @return RegionLoad instance.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   *<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>   * @throws IOException<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>   */<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>    int stores = 0;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    int storefiles = 0;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    int storeUncompressedSizeMB = 0;<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    int storefileSizeMB = 0;<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>    int memstoreSizeMB = (int) (r.getMemStoreDataSize() / 1024 / 1024);<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>    long storefileIndexSizeKB = 0;<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>    int rootLevelIndexSizeKB = 0;<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>    int totalStaticIndexSizeKB = 0;<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>    int totalStaticBloomSizeKB = 0;<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    long totalCompactingKVs = 0;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    long currentCompactedKVs = 0;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    stores += storeList.size();<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    for (HStore store : storeList) {<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      storefiles += store.getStorefilesCount();<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>      //TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      storefileIndexSizeKB += store.getStorefilesRootLevelIndexSize() / 1024;<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      if (progress != null) {<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      }<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      rootLevelIndexSizeKB += (int) (store.getStorefilesRootLevelIndexSize() / 1024);<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<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>    float dataLocality =<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>        r.getHDFSBlocksDistribution().getBlockLocalityIndex(serverName.getHostname());<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    if (regionLoadBldr == null) {<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    }<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    if (regionSpecifier == null) {<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      .setStores(stores)<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>      .setStorefiles(storefiles)<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      .setMemStoreSizeMB(memstoreSizeMB)<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      .setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB)<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      .setDataLocality(dataLocality)<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span><a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    return regionLoadBldr.build();<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>   * @param encodedRegionName<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>   * @return An instance of RegionLoad.<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>   */<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="line.1688"></a>
-<span class="sourceLineNo"

<TRUNCATED>

[45/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index e8619c3..79a6ede 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -25,8 +25,8 @@ under the License.
     <language>en-us</language>
     <copyright>&#169;2007 - 2018 The Apache Software Foundation</copyright>
     <item>
-      <title>File: 3613,
-             Errors: 15866,
+      <title>File: 3616,
+             Errors: 15863,
              Warnings: 0,
              Infos: 0
       </title>
@@ -17681,7 +17681,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  3
+                  2
                 </td>
               </tr>
                           <tr>
@@ -18288,6 +18288,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.BBKVComparator.java">org/apache/hadoop/hbase/BBKVComparator.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  1
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.BaseReplicationEndpoint.java">org/apache/hadoop/hbase/replication/BaseReplicationEndpoint.java</a>
                 </td>
                 <td>
@@ -26417,7 +26431,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -29474,6 +29488,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.TestRaceWhenCreatingReplicationSource.java">org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.testclassification.SecurityTests.java">org/apache/hadoop/hbase/testclassification/SecurityTests.java</a>
                 </td>
                 <td>
@@ -31555,7 +31583,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  38
+                  36
                 </td>
               </tr>
                           <tr>
@@ -33814,6 +33842,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMetaAssignmentWithStopMaster.java">org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestCreateTableProcedure.java">org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.java</a>
                 </td>
                 <td>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 5040f61..cd5e000 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180523" />
+    <meta name="Date-Revision-yyyymmdd" content="20180524" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -440,7 +440,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-05-23</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-05-24</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 80aaf42..de85a97 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180523" />
+    <meta name="Date-Revision-yyyymmdd" content="20180524" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -1105,7 +1105,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-05-23</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-05-24</li>
             </p>
                 </div>
 

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 3680678..7df2f9c 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180523" />
+    <meta name="Date-Revision-yyyymmdd" content="20180524" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -969,7 +969,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-05-23</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-05-24</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-frame.html b/devapidocs/allclasses-frame.html
index d5e1a7b..3ac1044 100644
--- a/devapidocs/allclasses-frame.html
+++ b/devapidocs/allclasses-frame.html
@@ -263,6 +263,7 @@
 <li><a href="org/apache/hadoop/hbase/client/coprocessor/Batch.Callback.html" title="interface in org.apache.hadoop.hbase.client.coprocessor" target="classFrame"><span class="interfaceName">Batch.Callback</span></a></li>
 <li><a href="org/apache/hadoop/hbase/client/BatchErrors.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">BatchErrors</a></li>
 <li><a href="org/apache/hadoop/hbase/client/BatchScanResultCache.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">BatchScanResultCache</a></li>
+<li><a href="org/apache/hadoop/hbase/BBKVComparator.html" title="class in org.apache.hadoop.hbase" target="classFrame">BBKVComparator</a></li>
 <li><a href="org/apache/hadoop/hbase/client/coprocessor/BigDecimalColumnInterpreter.html" title="class in org.apache.hadoop.hbase.client.coprocessor" target="classFrame">BigDecimalColumnInterpreter</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/BigDecimalComparator.html" title="class in org.apache.hadoop.hbase.filter" target="classFrame">BigDecimalComparator</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/BinaryComparator.html" title="class in org.apache.hadoop.hbase.filter" target="classFrame">BinaryComparator</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-noframe.html b/devapidocs/allclasses-noframe.html
index d1cfa10..e91abdd 100644
--- a/devapidocs/allclasses-noframe.html
+++ b/devapidocs/allclasses-noframe.html
@@ -263,6 +263,7 @@
 <li><a href="org/apache/hadoop/hbase/client/coprocessor/Batch.Callback.html" title="interface in org.apache.hadoop.hbase.client.coprocessor"><span class="interfaceName">Batch.Callback</span></a></li>
 <li><a href="org/apache/hadoop/hbase/client/BatchErrors.html" title="class in org.apache.hadoop.hbase.client">BatchErrors</a></li>
 <li><a href="org/apache/hadoop/hbase/client/BatchScanResultCache.html" title="class in org.apache.hadoop.hbase.client">BatchScanResultCache</a></li>
+<li><a href="org/apache/hadoop/hbase/BBKVComparator.html" title="class in org.apache.hadoop.hbase">BBKVComparator</a></li>
 <li><a href="org/apache/hadoop/hbase/client/coprocessor/BigDecimalColumnInterpreter.html" title="class in org.apache.hadoop.hbase.client.coprocessor">BigDecimalColumnInterpreter</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/BigDecimalComparator.html" title="class in org.apache.hadoop.hbase.filter">BigDecimalComparator</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/BinaryComparator.html" title="class in org.apache.hadoop.hbase.filter">BinaryComparator</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 4b2dde9..3fd6179 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3768,21 +3768,21 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Wed May 23 14:39:54 UTC 2018"</code></td>
+<td class="colLast"><code>"Thu May 24 14:39:22 UTC 2018"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"5721150c6d910ef95c30c0dd3126f58b6096f1b5"</code></td>
+<td class="colLast"><code>"f3d1c021de2264301f68eadb9ef126ff83d7ef53"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"a5a73d9f267b5d087f582dbbf9e506e1"</code></td>
+<td class="colLast"><code>"9cf2b1576b925f830d9095fedcae0329"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index aa76175..b3f6552 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -5719,6 +5719,13 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/HashTable.ResultHasher.html#batchStartKey">batchStartKey</a></span> - Variable in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/HashTable.ResultHasher.html" title="class in org.apache.hadoop.hbase.mapreduce">HashTable.ResultHasher</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/BBKVComparator.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">BBKVComparator</span></a> - Class in <a href="org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a></dt>
+<dd>
+<div class="block">A comparator for case where <a href="org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase"><code>ByteBufferKeyValue</code></a> is prevalent type (BBKV
+ is base-type in hbase2).</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/BBKVComparator.html#BBKVComparator-java.util.Comparator-">BBKVComparator(Comparator)</a></span> - Constructor for class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/BBKVComparator.html" title="class in org.apache.hadoop.hbase">BBKVComparator</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tmpl/regionserver/BlockCacheViewTmplImpl.html#bcn">bcn</a></span> - Variable in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="org/apache/hadoop/hbase/tmpl/regionserver/BlockCacheViewTmplImpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">BlockCacheViewTmplImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#bcn">bcn</a></span> - Variable in class org.apache.hadoop.hbase.tmpl.regionserver.<a href="org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a></dt>
@@ -14669,6 +14676,10 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html#ComparatorType--">ComparatorType()</a></span> - Constructor for enum org.apache.hadoop.hbase.rest.model.<a href="org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/BBKVComparator.html#compare-java.lang.Object-java.lang.Object-">compare(Object, Object)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/BBKVComparator.html" title="class in org.apache.hadoop.hbase">BBKVComparator</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/BBKVComparator.html#compare-org.apache.hadoop.hbase.ByteBufferKeyValue-org.apache.hadoop.hbase.ByteBufferKeyValue-">compare(ByteBufferKeyValue, ByteBufferKeyValue)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/BBKVComparator.html" title="class in org.apache.hadoop.hbase">BBKVComparator</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparator.html#compare-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compare(Cell, Cell)</a></span> - Method in interface org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a></dt>
 <dd>
 <div class="block">Lexographically compares two cells.</div>
@@ -14680,9 +14691,7 @@
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparatorImpl.html#compare-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compare(Cell, Cell)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparatorImpl.html#compare-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-boolean-">compare(Cell, Cell, boolean)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a></dt>
-<dd>
-<div class="block">Compare cells.</div>
-</dd>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html#compare-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-boolean-">compare(Cell, Cell, boolean)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl.MetaCellComparator</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellUtil.html#compare-org.apache.hadoop.hbase.CellComparator-org.apache.hadoop.hbase.Cell-byte:A-int-int-">compare(CellComparator, Cell, byte[], int, int)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellUtil.html" title="class in org.apache.hadoop.hbase">CellUtil</a></dt>
@@ -14794,10 +14803,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/AssignProcedure.CompareAssignProcedure.html#CompareAssignProcedure--">CompareAssignProcedure()</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/AssignProcedure.CompareAssignProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignProcedure.CompareAssignProcedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparatorImpl.html#compareByteBufferKeyValue-org.apache.hadoop.hbase.ByteBufferKeyValue-org.apache.hadoop.hbase.ByteBufferKeyValue-">compareByteBufferKeyValue(ByteBufferKeyValue, ByteBufferKeyValue)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a></dt>
-<dd>
-<div class="block">Specialized comparator for the ByteBufferKeyValue type exclusivesly.</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#compareCacheBlock-org.apache.hadoop.hbase.io.hfile.Cacheable-org.apache.hadoop.hbase.io.hfile.Cacheable-boolean-">compareCacheBlock(Cacheable, Cacheable, boolean)</a></span> - Static method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheUtil</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/FilterListBase.html#compareCell-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compareCell(Cell, Cell)</a></span> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/FilterListBase.html" title="class in org.apache.hadoop.hbase.filter">FilterListBase</a></dt>
@@ -15035,7 +15040,7 @@
 <dd>
 <div class="block">Compares the rows of the left and right cell.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparatorImpl.html#compareRows-org.apache.hadoop.hbase.Cell-int-org.apache.hadoop.hbase.Cell-int-">compareRows(Cell, int, Cell, int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparatorImpl.html#compareRows-org.apache.hadoop.hbase.Cell-int-org.apache.hadoop.hbase.Cell-int-">compareRows(Cell, int, Cell, int)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparatorImpl.html#compareRows-org.apache.hadoop.hbase.Cell-byte:A-int-int-">compareRows(Cell, byte[], int, int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a></dt>
 <dd>
@@ -15099,8 +15104,6 @@
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
 &nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparatorImpl.html#compareTimestampsInternal-long-long-">compareTimestampsInternal(long, long)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupInfo.html#compareTo-org.apache.hadoop.hbase.backup.BackupInfo-">compareTo(BackupInfo)</a></span> - Method in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a></dt>
 <dd>
 <div class="block">We use only time stamps to compare objects during sort operation</div>
@@ -18066,7 +18069,7 @@
 <div class="block"><span class="deprecationComment">As of HBase-2.0. Will be removed in 3.0.</span></div>
 </div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#copyToChunkCell-org.apache.hadoop.hbase.Cell-java.nio.ByteBuffer-int-int-">copyToChunkCell(Cell, ByteBuffer, int, int)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreLABImpl</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#copyToChunkCell-org.apache.hadoop.hbase.Cell-java.nio.ByteBuffer-int-int-">copyToChunkCell(Cell, ByteBuffer, int, int)</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreLABImpl</a></dt>
 <dd>
 <div class="block">Clone the passed cell by copying its data into the passed buf and create a cell with a chunkid
  out of it</div>
@@ -29801,6 +29804,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/FairQueue.html#FairQueue--">FairQueue()</a></span> - Constructor for class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/FairQueue.html" title="class in org.apache.hadoop.hbase.master.procedure">FairQueue</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/BBKVComparator.html#fallback">fallback</a></span> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/BBKVComparator.html" title="class in org.apache.hadoop.hbase">BBKVComparator</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/RpcServer.html#FALLBACK_TO_INSECURE_CLIENT_AUTH">FALLBACK_TO_INSECURE_CLIENT_AUTH</a></span> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/RpcServer.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer</a></dt>
 <dd>
 <div class="block">Whether we allow a fallback to SIMPLE auth for insecure clients when security is enabled.</div>
@@ -39612,6 +39617,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ServerName.html#getHostname--">getHostname()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ServerName.html#getHostnameLowerCase--">getHostnameLowerCase()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ServerName.html#getHostNameMinusDomain-java.lang.String-">getHostNameMinusDomain(String)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></dt>
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>
@@ -48345,6 +48352,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize(boolean)</a></span> - Method in interface org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize()</a></span> - Method in interface org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedExtendedCell.html#getSerializedSize-boolean-">getSerializedSize(boolean)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedExtendedCell.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.OffheapDecodedExtendedCell</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html#getSerializedSize-boolean-">getSerializedSize(boolean)</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html" title="class in org.apache.hadoop.hbase.io.encoding">BufferedDataBlockEncoder.OnheapDecodedCell</a></dt>
@@ -48841,6 +48850,12 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/HBaseFsck.html#getSidelineDir--">getSidelineDir()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparator.html#getSimpleComparator--">getSimpleComparator()</a></span> - Method in interface org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparatorImpl.html#getSimpleComparator--">getSimpleComparator()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html#getSimpleComparator--">getSimpleComparator()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl.MetaCellComparator</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/Size.Unit.html#getSimpleName--">getSimpleName()</a></span> - Method in enum org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase">Size.Unit</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#getSingleFactor--">getSingleFactor()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache</a></dt>
@@ -59827,7 +59842,7 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html#initializeThreads--">initializeThreads()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#initializeWALEntryFilter--">initializeWALEntryFilter()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSource</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#initializeWALEntryFilter-java.util.UUID-">initializeWALEntryFilter(UUID)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSource</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegion.html#initializeWarmup-org.apache.hadoop.hbase.util.CancelableProgressable-">initializeWarmup(CancelableProgressable)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></dt>
 <dd>&nbsp;</dd>
@@ -66257,7 +66272,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#listTableSnapshots-java.util.regex.Pattern-java.util.regex.Pattern-">listTableSnapshots(Pattern, Pattern)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/UnsafeAccess.html#littleEndian">littleEndian</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/UnsafeAccess.html" title="class in org.apache.hadoop.hbase.util">UnsafeAccess</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/UnsafeAccess.html#LITTLE_ENDIAN">LITTLE_ENDIAN</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/UnsafeAccess.html" title="class in org.apache.hadoop.hbase.util">UnsafeAccess</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetricsMasterSource.html#LIVE_REGION_SERVERS_DESC">LIVE_REGION_SERVERS_DESC</a></span> - Static variable in interface org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetricsMasterSource.html" title="interface in org.apache.hadoop.hbase.master">MetricsMasterSource</a></dt>
 <dd>&nbsp;</dd>
@@ -67057,6 +67072,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/util/RestoreTool.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.backup.util.<a href="org/apache/hadoop/hbase/backup/util/RestoreTool.html" title="class in org.apache.hadoop.hbase.backup.util">RestoreTool</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/BBKVComparator.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/BBKVComparator.html" title="class in org.apache.hadoop.hbase">BBKVComparator</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparatorImpl.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ChoreService.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></dt>
@@ -80074,8 +80091,6 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#peerClusterId">peerClusterId</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#peerClusterId">peerClusterId</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSource</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html#peerConfig">peerConfig</a></span> - Variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AddPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html#peerConfig">peerConfig</a></span> - Variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">RemovePeerProcedure</a></dt>
@@ -115366,7 +115381,7 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HMobStore.html#updateCellsSizeCompactedToMob-long-">updateCellsSizeCompactedToMob(long)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HMobStore.html" title="class in org.apache.hadoop.hbase.regionserver">HMobStore</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegion.html#updateCellTimestamps-java.lang.Iterable-byte:A-">updateCellTimestamps(Iterable&lt;List&lt;Cell&gt;&gt;, byte[])</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegion.html#updateCellTimestamps-java.lang.Iterable-byte:A-">updateCellTimestamps(Iterable&lt;List&lt;Cell&gt;&gt;, byte[])</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></dt>
 <dd>
 <div class="block">Replace any cell timestamps set to <a href="org/apache/hadoop/hbase/HConstants.html#LATEST_TIMESTAMP"><code>HConstants.LATEST_TIMESTAMP</code></a>
  provided current timestamp.</div>
@@ -121975,6 +121990,8 @@ the order they are declared.</div>
 <dd>
 <div class="block">Instantiate a ZooKeeper connection and watcher.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#zkwLock">zkwLock</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/zksyncer/ClientZKSyncer.ClientZkUpdater.html#znode">znode</a></span> - Variable in class org.apache.hadoop.hbase.master.zksyncer.<a href="org/apache/hadoop/hbase/master/zksyncer/ClientZKSyncer.ClientZkUpdater.html" title="class in org.apache.hadoop.hbase.master.zksyncer">ClientZKSyncer.ClientZkUpdater</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/Canary.ZookeeperMonitor.html#znode">znode</a></span> - Variable in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/Canary.ZookeeperMonitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.ZookeeperMonitor</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/BBKVComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/BBKVComparator.html b/devapidocs/org/apache/hadoop/hbase/BBKVComparator.html
new file mode 100644
index 0000000..815f2a5
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/BBKVComparator.html
@@ -0,0 +1,387 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>BBKVComparator (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="BBKVComparator (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":9,"i1":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<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/BBKVComparator.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>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/apache/hadoop/hbase/BaseConfigurable.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/ByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/apache/hadoop/hbase/BBKVComparator.html" target="_top">Frames</a></li>
+<li><a href="BBKVComparator.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>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase</div>
+<h2 title="Class BBKVComparator" class="title">Class BBKVComparator</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.BBKVComparator</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a></dd>
+</dl>
+<hr>
+<br>
+<pre>@InterfaceAudience.Private
+public class <a href="../../../../src-html/org/apache/hadoop/hbase/BBKVComparator.html#line.64">BBKVComparator</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>
+implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a></pre>
+<div class="block">A comparator for case where <a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase"><code>ByteBufferKeyValue</code></a> is prevalent type (BBKV
+ is base-type in hbase2). Takes a general comparator as fallback in case types are NOT the
+ expected ByteBufferKeyValue.
+
+ <p>This is a tricked-out Comparator at heart of hbase read and write. It is in
+ the HOT path so we try all sorts of ugly stuff so we can go faster. See below
+ in this javadoc comment for the list.
+
+ <p>Apply this comparator narrowly so it is fed exclusively ByteBufferKeyValues
+ as much as is possible so JIT can settle (e.g. make one per ConcurrentSkipListMap
+ in HStore).
+
+ <p>Exploits specially added methods in BBKV to save on deserializations of shorts,
+ longs, etc: i.e. calculating the family length requires row length; pass it in
+ rather than recalculate it, and so on.
+
+ <p>This comparator does static dispatch to private final methods so hotspot is comfortable
+ deciding inline.
+
+ <p>Measurement has it that we almost have it so all inlines from memstore
+ ConcurrentSkipListMap on down to the (unsafe) intrinisics that do byte compare
+ and deserialize shorts and ints; needs a bit more work.
+
+ <p>Does not take a Type to compare: i.e. it is not a Comparator&lt;Cell> or
+ CellComparator&lt;Cell> or Comparator&lt;ByteBufferKeyValue> because that adds
+ another method to the hierarchy -- from compare(Object, Object)
+ to dynamic compare(Cell, Cell) to static private compare -- and inlining doesn't happen if
+ hierarchy is too deep (it is the case here).
+
+ <p>Be careful making changes. Compare perf before and after and look at what
+ hotspot ends up generating before committing change (jitwatch is helpful here).
+ Changing this one class doubled write throughput (HBASE-20483).</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/BBKVComparator.html#fallback">fallback</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected static org.slf4j.Logger</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/BBKVComparator.html#LOG">LOG</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<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/BBKVComparator.html#BBKVComparator-java.util.Comparator-">BBKVComparator</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&nbsp;fallback)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>(package private) static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/BBKVComparator.html#compare-org.apache.hadoop.hbase.ByteBufferKeyValue-org.apache.hadoop.hbase.ByteBufferKeyValue-">compare</a></span>(<a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferKeyValue</a>&nbsp;left,
+       <a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferKeyValue</a>&nbsp;right)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/BBKVComparator.html#compare-java.lang.Object-java.lang.Object-">compare</a></span>(<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>&nbsp;l,
+       <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>&nbsp;r)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<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></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.util.Comparator">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;java.util.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#comparing-java.util.function.Function-" title="class or interface in java.util">comparing</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#comparing-java.util.function.Function-java.util.Comparator-" title="class or interface in java.util">comparing</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#comparingDouble-java.util.function.ToDoubleFunction-" title="class or interface in java.util">comparingDouble</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#comparingInt-java.util.function.ToIntFunction-" title="class or interface in java.util">comparingInt</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#comparingLong-java.util.function.ToLongFunction-" title="class or interface in java.util"
 >comparingLong</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.util">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#naturalOrder--" title="class or interface in java.util">naturalOrder</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#nullsFirst-java.util.Comparator-" title="class or interface in java.util">nullsFirst</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#nullsLast-java.util.Comparator-" title="class or interface in java.util">nullsLast</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#reversed--" title="class or interface in java.util">reversed</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#reverseOrder--" t
 itle="class or interface in java.util">reverseOrder</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#thenComparing-java.util.Comparator-" title="class or interface in java.util">thenComparing</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#thenComparing-java.util.function.Function-" title="class or interface in java.util">thenComparing</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#thenComparing-java.util.function.Function-java.util.Comparator-" title="class or interface in java.util">thenComparing</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#thenComparingDouble-java.util.function.ToDoubleFunction-" title="class or interface in java.util">thenComparingDouble</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#thenComparingInt-java.ut
 il.function.ToIntFunction-" title="class or interface in java.util">thenComparingInt</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#thenComparingLong-java.util.function.ToLongFunction-" title="class or interface in java.util">thenComparingLong</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="LOG">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>LOG</h4>
+<pre>protected static final&nbsp;org.slf4j.Logger <a href="../../../../src-html/org/apache/hadoop/hbase/BBKVComparator.html#line.65">LOG</a></pre>
+</li>
+</ul>
+<a name="fallback">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>fallback</h4>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a> <a href="../../../../src-html/org/apache/hadoop/hbase/BBKVComparator.html#line.66">fallback</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="BBKVComparator-java.util.Comparator-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>BBKVComparator</h4>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/BBKVComparator.html#line.68">BBKVComparator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&nbsp;fallback)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="compare-java.lang.Object-java.lang.Object-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>compare</h4>
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/BBKVComparator.html#line.73">compare</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>&nbsp;l,
+                   <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>&nbsp;r)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true#compare-T-T-" title="class or interface in java.util">compare</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="compare-org.apache.hadoop.hbase.ByteBufferKeyValue-org.apache.hadoop.hbase.ByteBufferKeyValue-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>compare</h4>
+<pre>static final&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/BBKVComparator.html#line.84">compare</a>(<a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferKeyValue</a>&nbsp;left,
+                         <a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferKeyValue</a>&nbsp;right)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<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/BBKVComparator.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>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../org/apache/hadoop/hbase/BaseConfigurable.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/ByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?org/apache/hadoop/hbase/BBKVComparator.html" target="_top">Frames</a></li>
+<li><a href="BBKVComparator.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>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/BaseConfigurable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/BaseConfigurable.html b/devapidocs/org/apache/hadoop/hbase/BaseConfigurable.html
index 3e6a3cf..20df6dc 100644
--- a/devapidocs/org/apache/hadoop/hbase/BaseConfigurable.html
+++ b/devapidocs/org/apache/hadoop/hbase/BaseConfigurable.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../org/apache/hadoop/hbase/ByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/BBKVComparator.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?org/apache/hadoop/hbase/BaseConfigurable.html" target="_top">Frames</a></li>
@@ -298,7 +298,7 @@ implements org.apache.hadoop.conf.Configurable</pre>
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../org/apache/hadoop/hbase/ByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/BBKVComparator.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?org/apache/hadoop/hbase/BaseConfigurable.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/ByteBufferExtendedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ByteBufferExtendedCell.html b/devapidocs/org/apache/hadoop/hbase/ByteBufferExtendedCell.html
index 73b8674..478639a3c 100644
--- a/devapidocs/org/apache/hadoop/hbase/ByteBufferExtendedCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/ByteBufferExtendedCell.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../org/apache/hadoop/hbase/BaseConfigurable.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/BBKVComparator.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
@@ -267,7 +267,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSequenceId--">getSequenceId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getTagsArray--">getTagsArray</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getTagsLength--">getTagsLength</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getTagsOffset--">getTagsOffset</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getTypeByte--">getTypeByte</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#setSequenceId-long-">setSequenceId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#setTimestamp-byte:A-">setTimestamp</a>
 , <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#setTimestamp-long-">setTimestamp</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSequenceId--">getSequenceId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getTagsArray--">getTagsArray</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getTagsLength--">getTagsLength</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getTagsOffset--">getTagsOffset</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getTypeByte--">getTypeByte</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#setSequenceId-long-">setSequenceId
 </a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#setTimestamp-byte:A-">setTimestamp</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#setTimestamp-long-">setTimestamp</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">
@@ -479,7 +479,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../org/apache/hadoop/hbase/BaseConfigurable.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/BBKVComparator.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/ByteBufferKeyOnlyKeyValue.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ByteBufferKeyOnlyKeyValue.html b/devapidocs/org/apache/hadoop/hbase/ByteBufferKeyOnlyKeyValue.html
index 1ee3192..5fd62ea 100644
--- a/devapidocs/org/apache/hadoop/hbase/ByteBufferKeyOnlyKeyValue.html
+++ b/devapidocs/org/apache/hadoop/hbase/ByteBufferKeyOnlyKeyValue.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <hr>
 <br>
@@ -435,7 +435,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/ByteBufferExtendedCell.html
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/ByteBufferKeyValue.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ByteBufferKeyValue.html b/devapidocs/org/apache/hadoop/hbase/ByteBufferKeyValue.html
index 5ab9af1..f11b7ee 100644
--- a/devapidocs/org/apache/hadoop/hbase/ByteBufferKeyValue.html
+++ b/devapidocs/org/apache/hadoop/hbase/ByteBufferKeyValue.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
@@ -495,7 +495,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/ByteBufferExtendedCell.html
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">


[17/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html
index 85373ba..d253aa8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.RSGroupAdminServiceImpl.html
@@ -41,208 +41,208 @@
 <span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.CoprocessorEnvironment;<a name="line.33"></a>
 <span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HConstants;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.ServerName;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.TableName;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.SnapshotDescription;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.constraint.ConstraintException;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.coprocessor.CoreCoprocessor;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.coprocessor.HasMasterServices;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessor;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.coprocessor.MasterObserver;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.coprocessor.ObserverContext;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.net.Address;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.AddRSGroupRequest;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.AddRSGroupResponse;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.BalanceRSGroupRequest;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.BalanceRSGroupResponse;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfServerRequest;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfServerResponse;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfTableRequest;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfTableResponse;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoRequest;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoResponse;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.ListRSGroupInfosRequest;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.ListRSGroupInfosResponse;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersAndTablesRequest;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersAndTablesResponse;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersRequest;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersResponse;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveTablesRequest;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveTablesResponse;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdminService;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveRSGroupRequest;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveRSGroupResponse;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveServersRequest;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveServersResponse;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.security.User;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.security.access.AccessChecker;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.security.access.Permission.Action;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.slf4j.Logger;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.slf4j.LoggerFactory;<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.88"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ServerName;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.TableName;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.SnapshotDescription;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.constraint.ConstraintException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.coprocessor.CoreCoprocessor;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.coprocessor.HasMasterServices;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessor;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.coprocessor.MasterObserver;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.coprocessor.ObserverContext;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.net.Address;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.AddRSGroupRequest;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.AddRSGroupResponse;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.BalanceRSGroupRequest;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.BalanceRSGroupResponse;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfServerRequest;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfServerResponse;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfTableRequest;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfTableResponse;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoRequest;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoResponse;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.ListRSGroupInfosRequest;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.ListRSGroupInfosResponse;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersAndTablesRequest;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersAndTablesResponse;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersRequest;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersResponse;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveTablesRequest;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveTablesResponse;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdminService;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveRSGroupRequest;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveRSGroupResponse;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveServersRequest;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveServersResponse;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.security.User;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.security.access.AccessChecker;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.security.access.Permission.Action;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.slf4j.Logger;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.slf4j.LoggerFactory;<a name="line.88"></a>
 <span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>// TODO: Encapsulate MasterObserver functions into separate subclass.<a name="line.90"></a>
-<span class="sourceLineNo">091</span>@CoreCoprocessor<a name="line.91"></a>
-<span class="sourceLineNo">092</span>@InterfaceAudience.Private<a name="line.92"></a>
-<span class="sourceLineNo">093</span>public class RSGroupAdminEndpoint implements MasterCoprocessor, MasterObserver {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  private static final Logger LOG = LoggerFactory.getLogger(RSGroupAdminEndpoint.class);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  private MasterServices master = null;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  // Only instance of RSGroupInfoManager. RSGroup aware load balancers ask for this instance on<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  // their setup.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private RSGroupInfoManager groupInfoManager;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  private RSGroupAdminServer groupAdminServer;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private final RSGroupAdminService groupAdminService = new RSGroupAdminServiceImpl();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private AccessChecker accessChecker;<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  /** Provider for mapping principal names to Users */<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  private UserProvider userProvider;<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  @Override<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  public void start(CoprocessorEnvironment env) throws IOException {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    if (!(env instanceof HasMasterServices)) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      throw new IOException("Does not implement HMasterServices");<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>    master = ((HasMasterServices)env).getMasterServices();<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    groupInfoManager = RSGroupInfoManagerImpl.getInstance(master);<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    groupAdminServer = new RSGroupAdminServer(master, groupInfoManager);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    Class&lt;?&gt; clazz =<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        master.getConfiguration().getClass(HConstants.HBASE_MASTER_LOADBALANCER_CLASS, null);<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    if (!RSGroupableBalancer.class.isAssignableFrom(clazz)) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      throw new IOException("Configured balancer does not support RegionServer groups.");<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    ZKWatcher zk = ((HasMasterServices)env).getMasterServices().getZooKeeper();<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    accessChecker = new AccessChecker(env.getConfiguration(), zk);<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>    // set the user-provider.<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    this.userProvider = UserProvider.instantiate(env.getConfiguration());<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>  @Override<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  public void stop(CoprocessorEnvironment env) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    accessChecker.stop();<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>  @Override<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  public Iterable&lt;Service&gt; getServices() {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    return Collections.singleton(groupAdminService);<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>  @Override<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  public Optional&lt;MasterObserver&gt; getMasterObserver() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    return Optional.of(this);<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>  RSGroupInfoManager getGroupInfoManager() {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    return groupInfoManager;<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>  /**<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * Implementation of RSGroupAdminService defined in RSGroupAdmin.proto.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * This class calls {@link RSGroupAdminServer} for actual work, converts result to protocol<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * buffer response, handles exceptions if any occurred and then calls the {@code RpcCallback} with<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * the response.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  private class RSGroupAdminServiceImpl extends RSGroupAdminProtos.RSGroupAdminService {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public void getRSGroupInfo(RpcController controller,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        GetRSGroupInfoRequest request, RpcCallback&lt;GetRSGroupInfoResponse&gt; done) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      GetRSGroupInfoResponse.Builder builder = GetRSGroupInfoResponse.newBuilder();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      String groupName = request.getRSGroupName();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      LOG.info(master.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, group="<a name="line.159"></a>
-<span class="sourceLineNo">160</span>              + groupName);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      try {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        checkPermission("getRSGroupInfo");<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        RSGroupInfo rsGroupInfo = groupAdminServer.getRSGroupInfo(groupName);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        if (rsGroupInfo != null) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>          builder.setRSGroupInfo(RSGroupProtobufUtil.toProtoGroupInfo(rsGroupInfo));<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      } catch (IOException e) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      done.run(builder.build());<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>    @Override<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    public void getRSGroupInfoOfTable(RpcController controller,<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        GetRSGroupInfoOfTableRequest request, RpcCallback&lt;GetRSGroupInfoOfTableResponse&gt; done) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      GetRSGroupInfoOfTableResponse.Builder builder = GetRSGroupInfoOfTableResponse.newBuilder();<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      LOG.info(master.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, table="<a name="line.178"></a>
-<span class="sourceLineNo">179</span>          + tableName);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      try {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        checkPermission("getRSGroupInfoOfTable");<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        RSGroupInfo RSGroupInfo = groupAdminServer.getRSGroupInfoOfTable(tableName);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        if (RSGroupInfo != null) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          builder.setRSGroupInfo(RSGroupProtobufUtil.toProtoGroupInfo(RSGroupInfo));<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      } catch (IOException e) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      done.run(builder.build());<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 void moveServers(RpcController controller, MoveServersRequest request,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        RpcCallback&lt;MoveServersResponse&gt; done) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      MoveServersResponse.Builder builder = MoveServersResponse.newBuilder();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      Set&lt;Address&gt; hostPorts = Sets.newHashSet();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      for (HBaseProtos.ServerName el : request.getServersList()) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        hostPorts.add(Address.fromParts(el.getHostName(), el.getPort()));<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      LOG.info(master.getClientIdAuditPrefix() + " move servers " + hostPorts +" to rsgroup "<a name="line.200"></a>
-<span class="sourceLineNo">201</span>          + request.getTargetGroup());<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      try {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        checkPermission("moveServers");<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        groupAdminServer.moveServers(hostPorts, request.getTargetGroup());<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      } catch (IOException e) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      done.run(builder.build());<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>    @Override<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    public void moveTables(RpcController controller, MoveTablesRequest request,<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        RpcCallback&lt;MoveTablesResponse&gt; done) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      MoveTablesResponse.Builder builder = MoveTablesResponse.newBuilder();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      Set&lt;TableName&gt; tables = new HashSet&lt;&gt;(request.getTableNameList().size());<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      for (HBaseProtos.TableName tableName : request.getTableNameList()) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        tables.add(ProtobufUtil.toTableName(tableName));<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      LOG.info(master.getClientIdAuditPrefix() + " move tables " + tables +" to rsgroup "<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          + request.getTargetGroup());<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      try {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        checkPermission("moveTables");<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        groupAdminServer.moveTables(tables, request.getTargetGroup());<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      } catch (IOException e) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.225"></a>
+<span class="sourceLineNo">090</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>// TODO: Encapsulate MasterObserver functions into separate subclass.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>@CoreCoprocessor<a name="line.93"></a>
+<span class="sourceLineNo">094</span>@InterfaceAudience.Private<a name="line.94"></a>
+<span class="sourceLineNo">095</span>public class RSGroupAdminEndpoint implements MasterCoprocessor, MasterObserver {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private static final Logger LOG = LoggerFactory.getLogger(RSGroupAdminEndpoint.class);<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private MasterServices master = null;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  // Only instance of RSGroupInfoManager. RSGroup aware load balancers ask for this instance on<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  // their setup.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  private RSGroupInfoManager groupInfoManager;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private RSGroupAdminServer groupAdminServer;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  private final RSGroupAdminService groupAdminService = new RSGroupAdminServiceImpl();<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  private AccessChecker accessChecker;<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  /** Provider for mapping principal names to Users */<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  private UserProvider userProvider;<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 void start(CoprocessorEnvironment env) throws IOException {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    if (!(env instanceof HasMasterServices)) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      throw new IOException("Does not implement HMasterServices");<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>    master = ((HasMasterServices)env).getMasterServices();<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    groupInfoManager = RSGroupInfoManagerImpl.getInstance(master);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    groupAdminServer = new RSGroupAdminServer(master, groupInfoManager);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    Class&lt;?&gt; clazz =<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        master.getConfiguration().getClass(HConstants.HBASE_MASTER_LOADBALANCER_CLASS, null);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    if (!RSGroupableBalancer.class.isAssignableFrom(clazz)) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      throw new IOException("Configured balancer does not support RegionServer groups.");<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    }<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    ZKWatcher zk = ((HasMasterServices)env).getMasterServices().getZooKeeper();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    accessChecker = new AccessChecker(env.getConfiguration(), zk);<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>    // set the user-provider.<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    this.userProvider = UserProvider.instantiate(env.getConfiguration());<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>  @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public void stop(CoprocessorEnvironment env) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    accessChecker.stop();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  }<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  @Override<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  public Iterable&lt;Service&gt; getServices() {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    return Collections.singleton(groupAdminService);<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>  @Override<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  public Optional&lt;MasterObserver&gt; getMasterObserver() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    return Optional.of(this);<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>
+<span class="sourceLineNo">145</span>  RSGroupInfoManager getGroupInfoManager() {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    return groupInfoManager;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  }<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  /**<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * Implementation of RSGroupAdminService defined in RSGroupAdmin.proto.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * This class calls {@link RSGroupAdminServer} for actual work, converts result to protocol<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * buffer response, handles exceptions if any occurred and then calls the {@code RpcCallback} with<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * the response.<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  private class RSGroupAdminServiceImpl extends RSGroupAdminProtos.RSGroupAdminService {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    @Override<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public void getRSGroupInfo(RpcController controller,<a name="line.157"></a>
+<span class="sourceLineNo">158</span>        GetRSGroupInfoRequest request, RpcCallback&lt;GetRSGroupInfoResponse&gt; done) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      GetRSGroupInfoResponse.Builder builder = GetRSGroupInfoResponse.newBuilder();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      String groupName = request.getRSGroupName();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      LOG.info(master.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, group="<a name="line.161"></a>
+<span class="sourceLineNo">162</span>              + groupName);<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      try {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        checkPermission("getRSGroupInfo");<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        RSGroupInfo rsGroupInfo = groupAdminServer.getRSGroupInfo(groupName);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        if (rsGroupInfo != null) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>          builder.setRSGroupInfo(RSGroupProtobufUtil.toProtoGroupInfo(rsGroupInfo));<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      } catch (IOException e) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      done.run(builder.build());<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 void getRSGroupInfoOfTable(RpcController controller,<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        GetRSGroupInfoOfTableRequest request, RpcCallback&lt;GetRSGroupInfoOfTableResponse&gt; done) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      GetRSGroupInfoOfTableResponse.Builder builder = GetRSGroupInfoOfTableResponse.newBuilder();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      LOG.info(master.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, table="<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          + tableName);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      try {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        checkPermission("getRSGroupInfoOfTable");<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        RSGroupInfo RSGroupInfo = groupAdminServer.getRSGroupInfoOfTable(tableName);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        if (RSGroupInfo != null) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>          builder.setRSGroupInfo(RSGroupProtobufUtil.toProtoGroupInfo(RSGroupInfo));<a name="line.186"></a>
+<span class="sourceLineNo">187</span>        }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      } catch (IOException e) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      }<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      done.run(builder.build());<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 void moveServers(RpcController controller, MoveServersRequest request,<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        RpcCallback&lt;MoveServersResponse&gt; done) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      MoveServersResponse.Builder builder = MoveServersResponse.newBuilder();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      Set&lt;Address&gt; hostPorts = Sets.newHashSet();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      for (HBaseProtos.ServerName el : request.getServersList()) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        hostPorts.add(Address.fromParts(el.getHostName(), el.getPort()));<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      LOG.info(master.getClientIdAuditPrefix() + " move servers " + hostPorts +" to rsgroup "<a name="line.202"></a>
+<span class="sourceLineNo">203</span>          + request.getTargetGroup());<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      try {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>          master.getMasterCoprocessorHost().preMoveServers(hostPorts, request.getTargetGroup());<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        checkPermission("moveServers");<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        groupAdminServer.moveServers(hostPorts, request.getTargetGroup());<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          master.getMasterCoprocessorHost().postMoveServers(hostPorts, request.getTargetGroup());<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      } catch (IOException e) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      done.run(builder.build());<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>    @Override<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    public void moveTables(RpcController controller, MoveTablesRequest request,<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        RpcCallback&lt;MoveTablesResponse&gt; done) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      MoveTablesResponse.Builder builder = MoveTablesResponse.newBuilder();<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      Set&lt;TableName&gt; tables = new HashSet&lt;&gt;(request.getTableNameList().size());<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      for (HBaseProtos.TableName tableName : request.getTableNameList()) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        tables.add(ProtobufUtil.toTableName(tableName));<a name="line.225"></a>
 <span class="sourceLineNo">226</span>      }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      done.run(builder.build());<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>    @Override<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void addRSGroup(RpcController controller, AddRSGroupRequest request,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        RpcCallback&lt;AddRSGroupResponse&gt; done) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      AddRSGroupResponse.Builder builder = AddRSGroupResponse.newBuilder();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      LOG.info(master.getClientIdAuditPrefix() + " add rsgroup " + request.getRSGroupName());<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      try {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        checkPermission("addRSGroup");<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        groupAdminServer.addRSGroup(request.getRSGroupName());<a name="line.237"></a>
+<span class="sourceLineNo">227</span>      LOG.info(master.getClientIdAuditPrefix() + " move tables " + tables +" to rsgroup "<a name="line.227"></a>
+<span class="sourceLineNo">228</span>          + request.getTargetGroup());<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      try {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>          master.getMasterCoprocessorHost().preMoveTables(tables, request.getTargetGroup());<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        checkPermission("moveTables");<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        groupAdminServer.moveTables(tables, request.getTargetGroup());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>          master.getMasterCoprocessorHost().postMoveTables(tables, request.getTargetGroup());<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        }<a name="line.237"></a>
 <span class="sourceLineNo">238</span>      } catch (IOException e) {<a name="line.238"></a>
 <span class="sourceLineNo">239</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.239"></a>
 <span class="sourceLineNo">240</span>      }<a name="line.240"></a>
@@ -250,244 +250,300 @@
 <span class="sourceLineNo">242</span>    }<a name="line.242"></a>
 <span class="sourceLineNo">243</span><a name="line.243"></a>
 <span class="sourceLineNo">244</span>    @Override<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    public void removeRSGroup(RpcController controller,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        RemoveRSGroupRequest request, RpcCallback&lt;RemoveRSGroupResponse&gt; done) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      RemoveRSGroupResponse.Builder builder =<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          RemoveRSGroupResponse.newBuilder();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      LOG.info(master.getClientIdAuditPrefix() + " remove rsgroup " + request.getRSGroupName());<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      try {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        checkPermission("removeRSGroup");<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        groupAdminServer.removeRSGroup(request.getRSGroupName());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      } catch (IOException e) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      done.run(builder.build());<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>    @Override<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    public void balanceRSGroup(RpcController controller,<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        BalanceRSGroupRequest request, RpcCallback&lt;BalanceRSGroupResponse&gt; done) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      BalanceRSGroupResponse.Builder builder = BalanceRSGroupResponse.newBuilder();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      LOG.info(master.getClientIdAuditPrefix() + " balance rsgroup, group=" +<a name="line.263"></a>
-<span class="sourceLineNo">264</span>              request.getRSGroupName());<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      try {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>        checkPermission("balanceRSGroup");<a name="line.266"></a>
-<span class="sourceLineNo">267</span>        builder.setBalanceRan(groupAdminServer.balanceRSGroup(request.getRSGroupName()));<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      } catch (IOException e) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        builder.setBalanceRan(false);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      done.run(builder.build());<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>    public void listRSGroupInfos(RpcController controller,<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        ListRSGroupInfosRequest request, RpcCallback&lt;ListRSGroupInfosResponse&gt; done) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      ListRSGroupInfosResponse.Builder builder = ListRSGroupInfosResponse.newBuilder();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      LOG.info(master.getClientIdAuditPrefix() + " list rsgroup");<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      try {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        checkPermission("listRSGroup");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        for (RSGroupInfo RSGroupInfo : groupAdminServer.listRSGroups()) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>          builder.addRSGroupInfo(RSGroupProtobufUtil.toProtoGroupInfo(RSGroupInfo));<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        }<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      } catch (IOException e) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      done.run(builder.build());<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 void getRSGroupInfoOfServer(RpcController controller,<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        GetRSGroupInfoOfServerRequest request, RpcCallback&lt;GetRSGroupInfoOfServerResponse&gt; done) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      GetRSGroupInfoOfServerResponse.Builder builder = GetRSGroupInfoOfServerResponse.newBuilder();<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      Address hp = Address.fromParts(request.getServer().getHostName(),<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          request.getServer().getPort());<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      LOG.info(master.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, server="<a name="line.297"></a>
-<span class="sourceLineNo">298</span>          + hp);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      try {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        checkPermission("getRSGroupInfoOfServer");<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        RSGroupInfo RSGroupInfo = groupAdminServer.getRSGroupOfServer(hp);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        if (RSGroupInfo != null) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          builder.setRSGroupInfo(RSGroupProtobufUtil.toProtoGroupInfo(RSGroupInfo));<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      } catch (IOException e) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      done.run(builder.build());<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 void moveServersAndTables(RpcController controller,<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        MoveServersAndTablesRequest request, RpcCallback&lt;MoveServersAndTablesResponse&gt; done) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      MoveServersAndTablesResponse.Builder builder = MoveServersAndTablesResponse.newBuilder();<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      Set&lt;Address&gt; hostPorts = Sets.newHashSet();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      for (HBaseProtos.ServerName el : request.getServersList()) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        hostPorts.add(Address.fromParts(el.getHostName(), el.getPort()));<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      Set&lt;TableName&gt; tables = new HashSet&lt;&gt;(request.getTableNameList().size());<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      for (HBaseProtos.TableName tableName : request.getTableNameList()) {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        tables.add(ProtobufUtil.toTableName(tableName));<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      LOG.info(master.getClientIdAuditPrefix() + " move servers " + hostPorts<a name="line.323"></a>
-<span class="sourceLineNo">324</span>          + " and tables " + tables + " to rsgroup" + request.getTargetGroup());<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      try {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>        checkPermission("moveServersAndTables");<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        groupAdminServer.moveServersAndTables(hostPorts, tables, request.getTargetGroup());<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      } catch (IOException e) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      done.run(builder.build());<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 void removeServers(RpcController controller,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        RemoveServersRequest request,<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        RpcCallback&lt;RemoveServersResponse&gt; done) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      RemoveServersResponse.Builder builder =<a name="line.338"></a>
-<span class="sourceLineNo">339</span>          RemoveServersResponse.newBuilder();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      Set&lt;Address&gt; servers = Sets.newHashSet();<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      for (HBaseProtos.ServerName el : request.getServersList()) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        servers.add(Address.fromParts(el.getHostName(), el.getPort()));<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      LOG.info(master.getClientIdAuditPrefix()<a name="line.344"></a>
-<span class="sourceLineNo">345</span>          + " remove decommissioned servers from rsgroup: " + servers);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      try {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        checkPermission("removeServers");<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        groupAdminServer.removeServers(servers);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      } catch (IOException e) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      done.run(builder.build());<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    }<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>  boolean rsgroupHasServersOnline(TableDescriptor desc) throws IOException {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    String groupName =<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        master.getClusterSchema().getNamespace(desc.getTableName().getNamespaceAsString())<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        .getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    if (groupName == null) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      groupName = RSGroupInfo.DEFAULT_GROUP;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    RSGroupInfo rsGroupInfo = groupAdminServer.getRSGroupInfo(groupName);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    if (rsGroupInfo == null) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      throw new ConstraintException(<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          "Default RSGroup (" + groupName + ") for this table's " + "namespace does not exist.");<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>    for (ServerName onlineServer : master.getServerManager().createDestinationServersList()) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      if (rsGroupInfo.getServers().contains(onlineServer.getAddress())) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        return true;<a name="line.371"></a>
+<span class="sourceLineNo">245</span>    public void addRSGroup(RpcController controller, AddRSGroupRequest request,<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        RpcCallback&lt;AddRSGroupResponse&gt; done) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      AddRSGroupResponse.Builder builder = AddRSGroupResponse.newBuilder();<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      LOG.info(master.getClientIdAuditPrefix() + " add rsgroup " + request.getRSGroupName());<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      try {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          master.getMasterCoprocessorHost().preAddRSGroup(request.getRSGroupName());<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        checkPermission("addRSGroup");<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        groupAdminServer.addRSGroup(request.getRSGroupName());<a name="line.254"></a>
+<span class="sourceLineNo">255</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          master.getMasterCoprocessorHost().postAddRSGroup(request.getRSGroupName());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      } catch (IOException e) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      done.run(builder.build());<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 void removeRSGroup(RpcController controller,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        RemoveRSGroupRequest request, RpcCallback&lt;RemoveRSGroupResponse&gt; done) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      RemoveRSGroupResponse.Builder builder =<a name="line.267"></a>
+<span class="sourceLineNo">268</span>          RemoveRSGroupResponse.newBuilder();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      LOG.info(master.getClientIdAuditPrefix() + " remove rsgroup " + request.getRSGroupName());<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      try {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          master.getMasterCoprocessorHost().preRemoveRSGroup(request.getRSGroupName());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        checkPermission("removeRSGroup");<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        groupAdminServer.removeRSGroup(request.getRSGroupName());<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>          master.getMasterCoprocessorHost().postRemoveRSGroup(request.getRSGroupName());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        }<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      } catch (IOException e) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      done.run(builder.build());<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 void balanceRSGroup(RpcController controller,<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        BalanceRSGroupRequest request, RpcCallback&lt;BalanceRSGroupResponse&gt; done) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      BalanceRSGroupResponse.Builder builder = BalanceRSGroupResponse.newBuilder();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      LOG.info(master.getClientIdAuditPrefix() + " balance rsgroup, group=" +<a name="line.289"></a>
+<span class="sourceLineNo">290</span>              request.getRSGroupName());<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      try {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>          master.getMasterCoprocessorHost().preBalanceRSGroup(request.getRSGroupName());<a name="line.293"></a>
+<span class="sourceLineNo">294</span>        }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        checkPermission("balanceRSGroup");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        boolean balancerRan = groupAdminServer.balanceRSGroup(request.getRSGroupName());<a name="line.296"></a>
+<span class="sourceLineNo">297</span>        builder.setBalanceRan(balancerRan);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>          master.getMasterCoprocessorHost().postBalanceRSGroup(request.getRSGroupName(),<a name="line.299"></a>
+<span class="sourceLineNo">300</span>              balancerRan);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        }<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      } catch (IOException e) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        builder.setBalanceRan(false);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      done.run(builder.build());<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>    @Override<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    public void listRSGroupInfos(RpcController controller,<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        ListRSGroupInfosRequest request, RpcCallback&lt;ListRSGroupInfosResponse&gt; done) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      ListRSGroupInfosResponse.Builder builder = ListRSGroupInfosResponse.newBuilder();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      LOG.info(master.getClientIdAuditPrefix() + " list rsgroup");<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      try {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        checkPermission("listRSGroup");<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        for (RSGroupInfo RSGroupInfo : groupAdminServer.listRSGroups()) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          builder.addRSGroupInfo(RSGroupProtobufUtil.toProtoGroupInfo(RSGroupInfo));<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      } catch (IOException e) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      done.run(builder.build());<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>    @Override<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    public void getRSGroupInfoOfServer(RpcController controller,<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        GetRSGroupInfoOfServerRequest request, RpcCallback&lt;GetRSGroupInfoOfServerResponse&gt; done) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      GetRSGroupInfoOfServerResponse.Builder builder = GetRSGroupInfoOfServerResponse.newBuilder();<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      Address hp = Address.fromParts(request.getServer().getHostName(),<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          request.getServer().getPort());<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      LOG.info(master.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, server="<a name="line.331"></a>
+<span class="sourceLineNo">332</span>          + hp);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      try {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        checkPermission("getRSGroupInfoOfServer");<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        RSGroupInfo info = groupAdminServer.getRSGroupOfServer(hp);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        if (info != null) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>          builder.setRSGroupInfo(RSGroupProtobufUtil.toProtoGroupInfo(info));<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      } catch (IOException e) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      }<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      done.run(builder.build());<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 void moveServersAndTables(RpcController controller,<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        MoveServersAndTablesRequest request, RpcCallback&lt;MoveServersAndTablesResponse&gt; done) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      MoveServersAndTablesResponse.Builder builder = MoveServersAndTablesResponse.newBuilder();<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      Set&lt;Address&gt; hostPorts = Sets.newHashSet();<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      for (HBaseProtos.ServerName el : request.getServersList()) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>        hostPorts.add(Address.fromParts(el.getHostName(), el.getPort()));<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      Set&lt;TableName&gt; tables = new HashSet&lt;&gt;(request.getTableNameList().size());<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      for (HBaseProtos.TableName tableName : request.getTableNameList()) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        tables.add(ProtobufUtil.toTableName(tableName));<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      LOG.info(master.getClientIdAuditPrefix() + " move servers " + hostPorts<a name="line.357"></a>
+<span class="sourceLineNo">358</span>          + " and tables " + tables + " to rsgroup" + request.getTargetGroup());<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      try {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>          master.getMasterCoprocessorHost().preMoveServersAndTables(hostPorts, tables,<a name="line.361"></a>
+<span class="sourceLineNo">362</span>              request.getTargetGroup());<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        }<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        checkPermission("moveServersAndTables");<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        groupAdminServer.moveServersAndTables(hostPorts, tables, request.getTargetGroup());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>          master.getMasterCoprocessorHost().postMoveServersAndTables(hostPorts, tables,<a name="line.367"></a>
+<span class="sourceLineNo">368</span>              request.getTargetGroup());<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        }<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      } catch (IOException e) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        CoprocessorRpcUtils.setControllerException(controller, e);<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>    return false;<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>  void assignTableToGroup(TableDescriptor desc) throws IOException {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    String groupName =<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        master.getClusterSchema().getNamespace(desc.getTableName().getNamespaceAsString())<a name="line.379"></a>
-<span class="sourceLineNo">380</span>                .getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    if (groupName == null) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      groupName = RSGroupInfo.DEFAULT_GROUP;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    RSGroupInfo rsGroupInfo = groupAdminServer.getRSGroupInfo(groupName);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    if (rsGroupInfo == null) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      throw new ConstraintException("Default RSGroup (" + groupName + ") for this table's "<a name="line.386"></a>
-<span class="sourceLineNo">387</span>          + "namespace does not exist.");<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    if (!rsGroupInfo.containsTable(desc.getTableName())) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      LOG.debug("Pre-moving table " + desc.getTableName() + " to RSGroup " + groupName);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      groupAdminServer.moveTables(Sets.newHashSet(desc.getTableName()), groupName);<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><a name="line.394"></a>
-<span class="sourceLineNo">395</span>  /////////////////////////////////////////////////////////////////////////////<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  // MasterObserver overrides<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  /////////////////////////////////////////////////////////////////////////////<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>  @Override<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  public void preCreateTableAction(<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      final ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      final TableDescriptor desc,<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      final RegionInfo[] regions) throws IOException {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    if (!desc.getTableName().isSystemTable() &amp;&amp; !rsgroupHasServersOnline(desc)) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      throw new HBaseIOException("No online servers in the rsgroup, which table " +<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          desc.getTableName().getNameAsString() + " belongs to");<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    }<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>  // Assign table to default RSGroup.<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  @Override<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  public void postCreateTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      TableDescriptor desc, RegionInfo[] regions) throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    assignTableToGroup(desc);<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>  // Remove table from its RSGroup.<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  @Override<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  public void postDeleteTable(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.419"></a>
-<span class="sourceLineNo">420</span>                              TableName tableName) throws IOException {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      RSGroupInfo group = groupAdminServer.getRSGroupInfoOfTable(tableName);<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      if (group != null) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        LOG.debug(String.format("Removing deleted table '%s' from rsgroup '%s'", tableName,<a name="line.424"></a>
-<span class="sourceLineNo">425</span>            group.getName()));<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        groupAdminServer.moveTables(Sets.newHashSet(tableName), null);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      }<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    } catch (IOException ex) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      LOG.debug("Failed to perform RSGroup information cleanup for table: " + tableName, ex);<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
+<span class="sourceLineNo">373</span>      done.run(builder.build());<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>    @Override<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    public void removeServers(RpcController controller,<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        RemoveServersRequest request,<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        RpcCallback&lt;RemoveServersResponse&gt; done) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      RemoveServersResponse.Builder builder =<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          RemoveServersResponse.newBuilder();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      Set&lt;Address&gt; servers = Sets.newHashSet();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      for (HBaseProtos.ServerName el : request.getServersList()) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        servers.add(Address.fromParts(el.getHostName(), el.getPort()));<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      LOG.info(master.getClientIdAuditPrefix()<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          + " remove decommissioned servers from rsgroup: " + servers);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      try {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          master.getMasterCoprocessorHost().preRemoveServers(servers);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        }<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        checkPermission("removeServers");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        groupAdminServer.removeServers(servers);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>          master.getMasterCoprocessorHost().postRemoveServers(servers);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        }<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      } catch (IOException e) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        CoprocessorRpcUtils.setControllerException(controller, e);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      done.run(builder.build());<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  boolean rsgroupHasServersOnline(TableDescriptor desc) throws IOException {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    String groupName;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    try {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      groupName =<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        master.getClusterSchema().getNamespace(desc.getTableName().getNamespaceAsString())<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        .getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      if (groupName == null) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>        groupName = RSGroupInfo.DEFAULT_GROUP;<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      }<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    } catch (MasterNotRunningException | PleaseHoldException e) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      LOG.info("Master has not initialized yet; temporarily using default RSGroup '" +<a name="line.414"></a>
+<span class="sourceLineNo">415</span>          RSGroupInfo.DEFAULT_GROUP + "' for deploy of system table");<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      groupName = RSGroupInfo.DEFAULT_GROUP;<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
+<span class="sourceLineNo">418</span><a name="line.418"></a>
+<span class="sourceLineNo">419</span>    RSGroupInfo rsGroupInfo = groupAdminServer.getRSGroupInfo(groupName);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    if (rsGroupInfo == null) {<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      throw new ConstraintException(<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          "Default RSGroup (" + groupName + ") for this table's " + "namespace does not exist.");<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>    for (ServerName onlineServer : master.getServerManager().createDestinationServersList()) {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      if (rsGroupInfo.getServers().contains(onlineServer.getAddress())) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        return true;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    return false;<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 void preCreateNamespace(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>                                 NamespaceDescriptor ns) throws IOException {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    String group = ns.getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    if(group != null &amp;&amp; groupAdminServer.getRSGroupInfo(group) == null) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      throw new ConstraintException("Region server group "+group+" does not exit");<a name="line.438"></a>
+<span class="sourceLineNo">433</span>  void assignTableToGroup(TableDescriptor desc) throws IOException {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    String groupName =<a name="line.434"></a>
+<span class="sourceLineNo">435</span>        master.getClusterSchema().getNamespace(desc.getTableName().getNamespaceAsString())<a name="line.435"></a>
+<span class="sourceLineNo">436</span>                .getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    if (groupName == null) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      groupName = RSGroupInfo.DEFAULT_GROUP;<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>  @Override<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  public void preModifyNamespace(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      NamespaceDescriptor ns) throws IOException {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    preCreateNamespace(ctx, ns);<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>  @Override<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  public void preCloneSnapshot(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      SnapshotDescription snapshot, TableDescriptor desc) throws IOException {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    assignTableToGroup(desc);<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 void postClearDeadServers(ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      List&lt;ServerName&gt; servers, List&lt;ServerName&gt; notClearedServers)<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      throws IOException {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    Set&lt;Address&gt; clearedServer = servers.stream().<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        filter(server -&gt; !notClearedServers.contains(server)).<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        map(ServerName::getAddress).<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        collect(Collectors.toSet());<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    groupAdminServer.removeServers(clearedServer);<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>  public void checkPermission(String request) throws IOException {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    ac

<TRUNCATED>

[07/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html
index 28539e5..c3f794b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html
@@ -55,404 +55,406 @@
 <span class="sourceLineNo">047</span> * implementations:<a name="line.47"></a>
 <span class="sourceLineNo">048</span> * &lt;ul&gt;<a name="line.48"></a>
 <span class="sourceLineNo">049</span> *   &lt;li&gt;&lt;em&gt;defaultProvider&lt;/em&gt; : whatever provider is standard for the hbase version. Currently<a name="line.49"></a>
-<span class="sourceLineNo">050</span> *                                  "filesystem"&lt;/li&gt;<a name="line.50"></a>
-<span class="sourceLineNo">051</span> *   &lt;li&gt;&lt;em&gt;filesystem&lt;/em&gt; : a provider that will run on top of an implementation of the Hadoop<a name="line.51"></a>
-<span class="sourceLineNo">052</span> *                             FileSystem interface, normally HDFS.&lt;/li&gt;<a name="line.52"></a>
-<span class="sourceLineNo">053</span> *   &lt;li&gt;&lt;em&gt;multiwal&lt;/em&gt; : a provider that will use multiple "filesystem" wal instances per region<a name="line.53"></a>
-<span class="sourceLineNo">054</span> *                           server.&lt;/li&gt;<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * &lt;/ul&gt;<a name="line.55"></a>
-<span class="sourceLineNo">056</span> *<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * Alternatively, you may provide a custom implementation of {@link WALProvider} by class name.<a name="line.57"></a>
-<span class="sourceLineNo">058</span> */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>@InterfaceAudience.Private<a name="line.59"></a>
-<span class="sourceLineNo">060</span>public class WALFactory {<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private static final Logger LOG = LoggerFactory.getLogger(WALFactory.class);<a name="line.62"></a>
+<span class="sourceLineNo">050</span> *                                  "asyncfs"&lt;/li&gt;<a name="line.50"></a>
+<span class="sourceLineNo">051</span> *   &lt;li&gt;&lt;em&gt;asyncfs&lt;/em&gt; : a provider that will run on top of an implementation of the Hadoop<a name="line.51"></a>
+<span class="sourceLineNo">052</span> *                             FileSystem interface via an asynchronous client.&lt;/li&gt;<a name="line.52"></a>
+<span class="sourceLineNo">053</span> *   &lt;li&gt;&lt;em&gt;filesystem&lt;/em&gt; : a provider that will run on top of an implementation of the Hadoop<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *                             FileSystem interface via HDFS's synchronous DFSClient.&lt;/li&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *   &lt;li&gt;&lt;em&gt;multiwal&lt;/em&gt; : a provider that will use multiple "filesystem" wal instances per region<a name="line.55"></a>
+<span class="sourceLineNo">056</span> *                           server.&lt;/li&gt;<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;/ul&gt;<a name="line.57"></a>
+<span class="sourceLineNo">058</span> *<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * Alternatively, you may provide a custom implementation of {@link WALProvider} by class name.<a name="line.59"></a>
+<span class="sourceLineNo">060</span> */<a name="line.60"></a>
+<span class="sourceLineNo">061</span>@InterfaceAudience.Private<a name="line.61"></a>
+<span class="sourceLineNo">062</span>public class WALFactory {<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>   * Maps between configuration names for providers and implementation classes.<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   */<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  static enum Providers {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    defaultProvider(AsyncFSWALProvider.class),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    filesystem(FSHLogProvider.class),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    multiwal(RegionGroupingProvider.class),<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    asyncfs(AsyncFSWALProvider.class);<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>    final Class&lt;? extends WALProvider&gt; clazz;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    Providers(Class&lt;? extends WALProvider&gt; clazz) {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      this.clazz = clazz;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    }<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public static final String WAL_PROVIDER = "hbase.wal.provider";<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  static final String DEFAULT_WAL_PROVIDER = Providers.defaultProvider.name();<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public static final String META_WAL_PROVIDER = "hbase.wal.meta_provider";<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  static final String DEFAULT_META_WAL_PROVIDER = Providers.defaultProvider.name();<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  final String factoryId;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  private final WALProvider provider;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  // The meta updates are written to a different wal. If this<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  // regionserver holds meta regions, then this ref will be non-null.<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  // lazily intialized; most RegionServers don't deal with META<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private final AtomicReference&lt;WALProvider&gt; metaProvider = new AtomicReference&lt;&gt;();<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>   * Configuration-specified WAL Reader used when a custom reader is requested<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private final Class&lt;? extends AbstractFSWALProvider.Reader&gt; logReaderClass;<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>   * How long to attempt opening in-recovery wals<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  private final int timeoutMillis;<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private final Configuration conf;<a name="line.102"></a>
+<span class="sourceLineNo">064</span>  private static final Logger LOG = LoggerFactory.getLogger(WALFactory.class);<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  /**<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   * Maps between configuration names for providers and implementation classes.<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  static enum Providers {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    defaultProvider(AsyncFSWALProvider.class),<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    filesystem(FSHLogProvider.class),<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    multiwal(RegionGroupingProvider.class),<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    asyncfs(AsyncFSWALProvider.class);<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>    final Class&lt;? extends WALProvider&gt; clazz;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    Providers(Class&lt;? extends WALProvider&gt; clazz) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      this.clazz = clazz;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    }<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public static final String WAL_PROVIDER = "hbase.wal.provider";<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  static final String DEFAULT_WAL_PROVIDER = Providers.defaultProvider.name();<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static final String META_WAL_PROVIDER = "hbase.wal.meta_provider";<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  static final String DEFAULT_META_WAL_PROVIDER = Providers.defaultProvider.name();<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>  final String factoryId;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final WALProvider provider;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  // The meta updates are written to a different wal. If this<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  // regionserver holds meta regions, then this ref will be non-null.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  // lazily intialized; most RegionServers don't deal with META<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private final AtomicReference&lt;WALProvider&gt; metaProvider = new AtomicReference&lt;&gt;();<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>   * Configuration-specified WAL Reader used when a custom reader is requested<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  private final Class&lt;? extends AbstractFSWALProvider.Reader&gt; logReaderClass;<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>   * How long to attempt opening in-recovery wals<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   */<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private final int timeoutMillis;<a name="line.102"></a>
 <span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // Used for the singleton WALFactory, see below.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  private WALFactory(Configuration conf) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    // this code is duplicated here so we can keep our members final.<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    // until we've moved reader/writer construction down into providers, this initialization must<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    // happen prior to provider initialization, in case they need to instantiate a reader/writer.<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    timeoutMillis = conf.getInt("hbase.hlog.open.timeout", 300000);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    /* TODO Both of these are probably specific to the fs wal provider */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    logReaderClass = conf.getClass("hbase.regionserver.hlog.reader.impl", ProtobufLogReader.class,<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      AbstractFSWALProvider.Reader.class);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    this.conf = conf;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // end required early initialization<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>    // this instance can't create wals, just reader/writers.<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    provider = null;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    factoryId = SINGLETON_ID;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  @VisibleForTesting<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public Class&lt;? extends WALProvider&gt; getProviderClass(String key, String defaultValue) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    try {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      return Providers.valueOf(conf.get(key, defaultValue)).clazz;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    } catch (IllegalArgumentException exception) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // Fall back to them specifying a class name<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      // Note that the passed default class shouldn't actually be used, since the above only fails<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      // when there is a config value present.<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      return conf.getClass(key, Providers.defaultProvider.clazz, WALProvider.class);<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>  WALProvider createProvider(Class&lt;? extends WALProvider&gt; clazz, String providerId)<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      throws IOException {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    LOG.info("Instantiating WALProvider of type " + clazz);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    try {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      final WALProvider result = clazz.getDeclaredConstructor().newInstance();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      result.init(this, conf, providerId);<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      return result;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    } catch (Exception e) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      LOG.error("couldn't set up WALProvider, the configured class is " + clazz);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      LOG.debug("Exception details for failure to load WALProvider.", e);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      throw new IOException("couldn't set up WALProvider", e);<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><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  /**<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * instantiate a provider from a config property. requires conf to have already been set (as well<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * as anything the provider might need to read).<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  WALProvider getProvider(String key, String defaultValue, String providerId) throws IOException {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    Class&lt;? extends WALProvider&gt; clazz = getProviderClass(key, defaultValue);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    WALProvider provider = createProvider(clazz, providerId);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    provider.addWALActionsListener(new MetricsWAL());<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    return provider;<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>  /**<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @param conf must not be null, will keep a reference to read params in later reader/writer<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   *          instances.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * @param factoryId a unique identifier for this factory. used i.e. by filesystem implementations<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   *          to make a directory<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   */<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  public WALFactory(Configuration conf, String factoryId) throws IOException {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    // until we've moved reader/writer construction down into providers, this initialization must<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    // happen prior to provider initialization, in case they need to instantiate a reader/writer.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    timeoutMillis = conf.getInt("hbase.hlog.open.timeout", 300000);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    /* TODO Both of these are probably specific to the fs wal provider */<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    logReaderClass = conf.getClass("hbase.regionserver.hlog.reader.impl", ProtobufLogReader.class,<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      AbstractFSWALProvider.Reader.class);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    this.conf = conf;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    this.factoryId = factoryId;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    // end required early initialization<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    if (conf.getBoolean("hbase.regionserver.hlog.enabled", true)) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      provider = getProvider(WAL_PROVIDER, DEFAULT_WAL_PROVIDER, null);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    } else {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      // special handling of existing configuration behavior.<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      LOG.warn("Running with WAL disabled.");<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      provider = new DisabledWALProvider();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      provider.init(this, conf, factoryId);<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><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  /**<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * Shutdown all WALs and clean up any underlying storage.<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * Use only when you will not need to replay and edits that have gone to any wals from this<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * factory.<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   */<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  public void close() throws IOException {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    final WALProvider metaProvider = this.metaProvider.get();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    if (null != metaProvider) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      metaProvider.close();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    // close is called on a WALFactory with null provider in the case of contention handling<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    // within the getInstance method.<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    if (null != provider) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      provider.close();<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    }<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>  /**<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * Tell the underlying WAL providers to shut down, but do not clean up underlying storage.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * If you are not ending cleanly and will need to replay edits from this factory's wals,<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * use this method if you can as it will try to leave things as tidy as possible.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   */<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  public void shutdown() throws IOException {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    IOException exception = null;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    final WALProvider metaProvider = this.metaProvider.get();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    if (null != metaProvider) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      try {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        metaProvider.shutdown();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      } catch(IOException ioe) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        exception = ioe;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    provider.shutdown();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    if (null != exception) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      throw exception;<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><a name="line.221"></a>
-<span class="sourceLineNo">222</span>  public List&lt;WAL&gt; getWALs() {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    return provider.getWALs();<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>  private WALProvider getMetaProvider() throws IOException {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    for (;;) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      WALProvider provider = this.metaProvider.get();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      if (provider != null) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        return provider;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      }<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      provider = getProvider(META_WAL_PROVIDER, DEFAULT_META_WAL_PROVIDER,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        AbstractFSWALProvider.META_WAL_PROVIDER_ID);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      if (metaProvider.compareAndSet(null, provider)) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        return provider;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      } else {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        // someone is ahead of us, close and try again.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        provider.close();<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>  }<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * @param region the region which we want to get a WAL for it. Could be null.<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  public WAL getWAL(RegionInfo region) throws IOException {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // use different WAL for hbase:meta<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (region != null &amp;&amp; region.isMetaRegion() &amp;&amp;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      region.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      return getMetaProvider().getWAL(region);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    } else {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      return provider.getWAL(region);<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>  public Reader createReader(final FileSystem fs, final Path path) throws IOException {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    return createReader(fs, path, (CancelableProgressable)null);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  }<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>   * Create a reader for the WAL. If you are reading from a file that's being written to and need<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * to reopen it multiple times, use {@link WAL.Reader#reset()} instead of this method<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * then just seek back to the last known good position.<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   * @return A WAL reader.  Close when done with it.<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   * @throws IOException<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   */<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  public Reader createReader(final FileSystem fs, final Path path,<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      CancelableProgressable reporter) throws IOException {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    return createReader(fs, path, reporter, true);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  public Reader createReader(final FileSystem fs, final Path path, CancelableProgressable reporter,<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      boolean allowCustom) throws IOException {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    Class&lt;? extends AbstractFSWALProvider.Reader&gt; lrClass =<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        allowCustom ? logReaderClass : ProtobufLogReader.class;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    try {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      // A wal file could be under recovery, so it may take several<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      // tries to get it open. Instead of claiming it is corrupted, retry<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      // to open it up to 5 minutes by default.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      long startWaiting = EnvironmentEdgeManager.currentTime();<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      long openTimeout = timeoutMillis + startWaiting;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      int nbAttempt = 0;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      AbstractFSWALProvider.Reader reader = null;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      while (true) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        try {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          reader = lrClass.getDeclaredConstructor().newInstance();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>          reader.init(fs, path, conf, null);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>          return reader;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        } catch (IOException e) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>          if (reader != null) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>            try {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>              reader.close();<a name="line.292"></a>
-<span class="sourceLineNo">293</span>            } catch (IOException exception) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>              LOG.warn("Could not close FSDataInputStream" + exception.getMessage());<a name="line.294"></a>
-<span class="sourceLineNo">295</span>              LOG.debug("exception details", exception);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>            }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          }<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>          String msg = e.getMessage();<a name="line.299"></a>
-<span class="sourceLineNo">300</span>          if (msg != null<a name="line.300"></a>
-<span class="sourceLineNo">301</span>              &amp;&amp; (msg.contains("Cannot obtain block length")<a name="line.301"></a>
-<span class="sourceLineNo">302</span>                  || msg.contains("Could not obtain the last block") || msg<a name="line.302"></a>
-<span class="sourceLineNo">303</span>                    .matches("Blocklist for [^ ]* has changed.*"))) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>            if (++nbAttempt == 1) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>              LOG.warn("Lease should have recovered. This is not expected. Will retry", e);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>            }<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>              throw new InterruptedIOException("Operation is cancelled");<a name="line.308"></a>
-<span class="sourceLineNo">309</span>            }<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            if (nbAttempt &gt; 2 &amp;&amp; openTimeout &lt; EnvironmentEdgeManager.currentTime()) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>              LOG.error("Can't open after " + nbAttempt + " attempts and "<a name="line.311"></a>
-<span class="sourceLineNo">312</span>                  + (EnvironmentEdgeManager.currentTime() - startWaiting) + "ms " + " for " + path);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>            } else {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>              try {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>                Thread.sleep(nbAttempt &lt; 3 ? 500 : 1000);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>                continue; // retry<a name="line.316"></a>
-<span class="sourceLineNo">317</span>              } catch (InterruptedException ie) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>                InterruptedIOException iioe = new InterruptedIOException();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>                iioe.initCause(ie);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>                throw iioe;<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>            throw new LeaseNotRecoveredException(e);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>          } else {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>            throw e;<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>      }<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    } catch (IOException ie) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      throw ie;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    } catch (Exception e) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      throw new IOException("Cannot get log reader", e);<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>  /**<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   * Create a writer for the WAL.<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   * Uses defaults.<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * &lt;p&gt;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * Should be package-private. public only for tests and<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * {@link org.apache.hadoop.hbase.regionserver.wal.Compressor}<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * @return A WAL writer. Close when done with it.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   */<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  public Writer createWALWriter(final FileSystem fs, final Path path) throws IOException {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    return FSHLogProvider.createWriter(conf, fs, path, false);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  /**<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * Should be package-private, visible for recovery testing.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * Uses defaults.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @return an overwritable writer for recovered edits. caller should close.<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   */<a name="line.352"></a>
-<span class="sourceLineNo">353</span>  @VisibleForTesting<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  public Writer createRecoveredEditsWriter(final FileSystem fs, final Path path)<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      throws IOException {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    return FSHLogProvider.createWriter(conf, fs, path, true);<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>  // These static methods are currently used where it's impractical to<a name="line.359"></a>
-<span class="sourceLineNo">360</span>  // untangle the reliance on state in the filesystem. They rely on singleton<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  // WALFactory that just provides Reader / Writers.<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  // For now, first Configuration object wins. Practically this just impacts the reader/writer class<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  private static final AtomicReference&lt;WALFactory&gt; singleton = new AtomicReference&lt;&gt;();<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  private static final String SINGLETON_ID = WALFactory.class.getName();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  <a name="line.365"></a>
-<span class="sourceLineNo">366</span>  // Public only for FSHLog<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  public static WALFactory getInstance(Configuration configuration) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    WALFactory factory = singleton.get();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    if (null == factory) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      WALFactory temp = new WALFactory(configuration);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      if (singleton.compareAndSet(null, temp)) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        factory = temp;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      } else {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        // someone else beat us to initializing<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        try {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          temp.close();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        } catch (IOException exception) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          LOG.debug("failed to close temporary singleton. ignoring.", exception);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        factory = singleton.get();<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>    return factory;<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>   * Create a reader for the given path, accept custom reader classes from conf.<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @return a WAL Reader, caller must close.<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  public static Reader createReader(final FileSystem fs, final Path path,<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      final Configuration configuration) throws IOException {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    return getInstance(configuration).createReader(fs, path);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
-<span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span>  /**<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * Create a reader for the given path, accept custom reader classes from conf.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * @return a WAL Reader, caller must close.<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   */<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  static Reader createReader(final FileSystem fs, final Path path,<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      final Configuration configuration, final CancelableProgressable reporter) throws IOException {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    return getInstance(configuration).createReader(fs, path, reporter);<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>  /**<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   * Create a reader for the given path, ignore custom reader classes from conf.<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   * only public pending move of {@link org.apache.hadoop.hbase.regionserver.wal.Compressor}<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   * @return a WAL Reader, caller must close.<a name="line.410"></a>
-<span class="sourceLineNo">411</span>   */<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  public static Reader createReaderIgnoreCustomClass(final FileSystem fs, final Path path,<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      final Configuration configuration) throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    return getInstance(configuration).createReader(fs, path, null, false);<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>   * If you already have a WALFactory, you should favor the instance method.<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * Uses defaults.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * @return a Writer that will overwrite files. Caller must close.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   */<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  static Writer createRecoveredEditsWriter(final FileSystem fs, final Path path,<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      final Configuration configuration)<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      throws IOException {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    return FSHLogProvider.createWriter(configuration, fs, path, true);<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>  /**<a name="line.428"></a>
-<span class="sourceLineNo">429</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   * Uses defaults.<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   * @return a writer that won't overwrite files. Caller must close.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   */<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  @VisibleForTesting<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  public static Writer createWALWriter(final FileSystem fs, final Path path,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      final Configuration configuration)<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      throws IOException {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    return FSHLogProvider.createWriter(configuration, fs, path, false);<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>  public final WALProvider getWALProvider() {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    return this.provider;<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>  public final WALProvider getMetaWALProvider() {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    return this.metaProvider.get();<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">104</span>  private final Configuration conf;<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  // Used for the singleton WALFactory, see below.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  private WALFactory(Configuration conf) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    // this code is duplicated here so we can keep our members final.<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    // until we've moved reader/writer construction down into providers, this initialization must<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    // happen prior to provider initialization, in case they need to instantiate a reader/writer.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    timeoutMillis = conf.getInt("hbase.hlog.open.timeout", 300000);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    /* TODO Both of these are probably specific to the fs wal provider */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    logReaderClass = conf.getClass("hbase.regionserver.hlog.reader.impl", ProtobufLogReader.class,<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      AbstractFSWALProvider.Reader.class);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    this.conf = conf;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    // end required early initialization<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>    // this instance can't create wals, just reader/writers.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    provider = null;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    factoryId = SINGLETON_ID;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  @VisibleForTesting<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public Class&lt;? extends WALProvider&gt; getProviderClass(String key, String defaultValue) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    try {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      return Providers.valueOf(conf.get(key, defaultValue)).clazz;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    } catch (IllegalArgumentException exception) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      // Fall back to them specifying a class name<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      // Note that the passed default class shouldn't actually be used, since the above only fails<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      // when there is a config value present.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      return conf.getClass(key, Providers.defaultProvider.clazz, WALProvider.class);<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><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  WALProvider createProvider(Class&lt;? extends WALProvider&gt; clazz, String providerId)<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      throws IOException {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    LOG.info("Instantiating WALProvider of type " + clazz);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    try {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      final WALProvider result = clazz.getDeclaredConstructor().newInstance();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      result.init(this, conf, providerId);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      return result;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    } catch (Exception e) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      LOG.error("couldn't set up WALProvider, the configured class is " + clazz);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      LOG.debug("Exception details for failure to load WALProvider.", e);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      throw new IOException("couldn't set up WALProvider", e);<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><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  /**<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * instantiate a provider from a config property. requires conf to have already been set (as well<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * as anything the provider might need to read).<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  WALProvider getProvider(String key, String defaultValue, String providerId) throws IOException {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    Class&lt;? extends WALProvider&gt; clazz = getProviderClass(key, defaultValue);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    WALProvider provider = createProvider(clazz, providerId);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    provider.addWALActionsListener(new MetricsWAL());<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    return provider;<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>   * @param conf must not be null, will keep a reference to read params in later reader/writer<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   *          instances.<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * @param factoryId a unique identifier for this factory. used i.e. by filesystem implementations<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   *          to make a directory<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   */<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  public WALFactory(Configuration conf, String factoryId) throws IOException {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    // until we've moved reader/writer construction down into providers, this initialization must<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    // happen prior to provider initialization, in case they need to instantiate a reader/writer.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    timeoutMillis = conf.getInt("hbase.hlog.open.timeout", 300000);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    /* TODO Both of these are probably specific to the fs wal provider */<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    logReaderClass = conf.getClass("hbase.regionserver.hlog.reader.impl", ProtobufLogReader.class,<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      AbstractFSWALProvider.Reader.class);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    this.conf = conf;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    this.factoryId = factoryId;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    // end required early initialization<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    if (conf.getBoolean("hbase.regionserver.hlog.enabled", true)) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      provider = getProvider(WAL_PROVIDER, DEFAULT_WAL_PROVIDER, null);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    } else {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      // special handling of existing configuration behavior.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      LOG.warn("Running with WAL disabled.");<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      provider = new DisabledWALProvider();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      provider.init(this, conf, factoryId);<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><a name="line.185"></a>
+<span class="sourceLineNo">186</span>  /**<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   * Shutdown all WALs and clean up any underlying storage.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   * Use only when you will not need to replay and edits that have gone to any wals from this<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * factory.<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   */<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  public void close() throws IOException {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    final WALProvider metaProvider = this.metaProvider.get();<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    if (null != metaProvider) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      metaProvider.close();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // close is called on a WALFactory with null provider in the case of contention handling<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    // within the getInstance method.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    if (null != provider) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      provider.close();<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><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  /**<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   * Tell the underlying WAL providers to shut down, but do not clean up underlying storage.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   * If you are not ending cleanly and will need to replay edits from this factory's wals,<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   * use this method if you can as it will try to leave things as tidy as possible.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   */<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  public void shutdown() throws IOException {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    IOException exception = null;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    final WALProvider metaProvider = this.metaProvider.get();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    if (null != metaProvider) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      try {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        metaProvider.shutdown();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      } catch(IOException ioe) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        exception = ioe;<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>    provider.shutdown();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    if (null != exception) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      throw exception;<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><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  public List&lt;WAL&gt; getWALs() {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    return provider.getWALs();<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>  private WALProvider getMetaProvider() throws IOException {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    for (;;) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      WALProvider provider = this.metaProvider.get();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      if (provider != null) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        return provider;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      }<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      provider = getProvider(META_WAL_PROVIDER, DEFAULT_META_WAL_PROVIDER,<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        AbstractFSWALProvider.META_WAL_PROVIDER_ID);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      if (metaProvider.compareAndSet(null, provider)) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        return provider;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      } else {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        // someone is ahead of us, close and try again.<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        provider.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>  }<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>   * @param region the region which we want to get a WAL for it. Could be null.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   */<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  public WAL getWAL(RegionInfo region) throws IOException {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    // use different WAL for hbase:meta<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    if (region != null &amp;&amp; region.isMetaRegion() &amp;&amp;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      region.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      return getMetaProvider().getWAL(region);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    } else {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      return provider.getWAL(region);<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><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  public Reader createReader(final FileSystem fs, final Path path) throws IOException {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    return createReader(fs, path, (CancelableProgressable)null);<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>  /**<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * Create a reader for the WAL. If you are reading from a file that's being written to and need<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * to reopen it multiple times, use {@link WAL.Reader#reset()} instead of this method<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * then just seek back to the last known good position.<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * @return A WAL reader.  Close when done with it.<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * @throws IOException<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  public Reader createReader(final FileSystem fs, final Path path,<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      CancelableProgressable reporter) throws IOException {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    return createReader(fs, path, reporter, true);<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>  public Reader createReader(final FileSystem fs, final Path path, CancelableProgressable reporter,<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      boolean allowCustom) throws IOException {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    Class&lt;? extends AbstractFSWALProvider.Reader&gt; lrClass =<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        allowCustom ? logReaderClass : ProtobufLogReader.class;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      // A wal file could be under recovery, so it may take several<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      // tries to get it open. Instead of claiming it is corrupted, retry<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      // to open it up to 5 minutes by default.<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      long startWaiting = EnvironmentEdgeManager.currentTime();<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      long openTimeout = timeoutMillis + startWaiting;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      int nbAttempt = 0;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      AbstractFSWALProvider.Reader reader = null;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      while (true) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        try {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>          reader = lrClass.getDeclaredConstructor().newInstance();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>          reader.init(fs, path, conf, null);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          return reader;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        } catch (IOException e) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          if (reader != null) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            try {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>              reader.close();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>            } catch (IOException exception) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>              LOG.warn("Could not close FSDataInputStream" + exception.getMessage());<a name="line.296"></a>
+<span class="sourceLineNo">297</span>              LOG.debug("exception details", exception);<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>          String msg = e.getMessage();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>          if (msg != null<a name="line.302"></a>
+<span class="sourceLineNo">303</span>              &amp;&amp; (msg.contains("Cannot obtain block length")<a name="line.303"></a>
+<span class="sourceLineNo">304</span>                  || msg.contains("Could not obtain the last block") || msg<a name="line.304"></a>
+<span class="sourceLineNo">305</span>                    .matches("Blocklist for [^ ]* has changed.*"))) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>            if (++nbAttempt == 1) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>              LOG.warn("Lease should have recovered. This is not expected. Will retry", e);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>            }<a name="line.308"></a>
+<span class="sourceLineNo">309</span>            if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>              throw new InterruptedIOException("Operation is cancelled");<a name="line.310"></a>
+<span class="sourceLineNo">311</span>            }<a name="line.311"></a>
+<span class="sourceLineNo">312</span>            if (nbAttempt &gt; 2 &amp;&amp; openTimeout &lt; EnvironmentEdgeManager.currentTime()) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>              LOG.error("Can't open after " + nbAttempt + " attempts and "<a name="line.313"></a>
+<span class="sourceLineNo">314</span>                  + (EnvironmentEdgeManager.currentTime() - startWaiting) + "ms " + " for " + path);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>            } else {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>              try {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>                Thread.sleep(nbAttempt &lt; 3 ? 500 : 1000);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>                continue; // retry<a name="line.318"></a>
+<span class="sourceLineNo">319</span>              } catch (InterruptedException ie) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>                InterruptedIOException iioe = new InterruptedIOException();<a name="line.320"></a>
+<span class="sourceLineNo">321</span>                iioe.initCause(ie);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>                throw iioe;<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>            throw new LeaseNotRecoveredException(e);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>          } else {<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>      }<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    } catch (IOException ie) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      throw ie;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    } catch (Exception e) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      throw new IOException("Cannot get log reader", e);<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>  /**<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * Create a writer for the WAL.<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * Uses defaults.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * &lt;p&gt;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * Should be package-private. public only for tests and<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * {@link org.apache.hadoop.hbase.regionserver.wal.Compressor}<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * @return A WAL writer. Close when done with it.<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   */<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  public Writer createWALWriter(final FileSystem fs, final Path path) throws IOException {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    return FSHLogProvider.createWriter(conf, fs, path, false);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  }<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>   * Should be package-private, visible for recovery testing.<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   * Uses defaults.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   * @return an overwritable writer for recovered edits. caller should close.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  @VisibleForTesting<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  public Writer createRecoveredEditsWriter(final FileSystem fs, final Path path)<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      throws IOException {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    return FSHLogProvider.createWriter(conf, fs, path, true);<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>  // These static methods are currently used where it's impractical to<a name="line.361"></a>
+<span class="sourceLineNo">362</span>  // untangle the reliance on state in the filesystem. They rely on singleton<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  // WALFactory that just provides Reader / Writers.<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  // For now, first Configuration object wins. Practically this just impacts the reader/writer class<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  private static final AtomicReference&lt;WALFactory&gt; singleton = new AtomicReference&lt;&gt;();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  private static final String SINGLETON_ID = WALFactory.class.getName();<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  <a name="line.367"></a>
+<span class="sourceLineNo">368</span>  // Public only for FSHLog<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  public static WALFactory getInstance(Configuration configuration) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    WALFactory factory = singleton.get();<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    if (null == factory) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      WALFactory temp = new WALFactory(configuration);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      if (singleton.compareAndSet(null, temp)) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        factory = temp;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      } else {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        // someone else beat us to initializing<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        try {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>          temp.close();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        } catch (IOException exception) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>          LOG.debug("failed to close temporary singleton. ignoring.", exception);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>        factory = singleton.get();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      }<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return factory;<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>  /**<a name="line.388"></a>
+<span class="sourceLineNo">389</span>   * Create a reader for the given path, accept custom reader classes from conf.<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * @return a WAL Reader, caller must close.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   */<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  public static Reader createReader(final FileSystem fs, final Path path,<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      final Configuration configuration) throws IOException {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    return getInstance(configuration).createReader(fs, path);<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>  /**<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * Create a reader for the given path, accept custom reader classes from conf.<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   * @return a WAL Reader, caller must close.<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  static Reader createReader(final FileSystem fs, final Path path,<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      final Configuration configuration, final CancelableProgressable reporter) throws IOException {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    return getInstance(configuration).createReader(fs, path, reporter);<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>  /**<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * Create a reader for the given path, ignore custom reader classes from conf.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   * only public pending move of {@link org.apache.hadoop.hbase.regionserver.wal.Compressor}<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * @return a WAL Reader, caller must close.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  public static Reader createReaderIgnoreCustomClass(final FileSystem fs, final Path path,<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      final Configuration configuration) throws IOException {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    return getInstance(configuration).createReader(fs, path, null, false);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>  }<a name="line.417"></a>
+<span class="sourceLineNo">418</span><a name="line.418"></a>
+<span class="sourceLineNo">419</span>  /**<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * Uses defaults.<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @return a Writer that will overwrite files. Caller must close.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   */<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  static Writer createRecoveredEditsWriter(final FileSystem fs, final Path path,<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      final Configuration configuration)<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      throws IOException {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    return FSHLogProvider.createWriter(configuration, fs, path, true);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<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>   * If you already have a WALFactory, you should favor the instance method.<a name="line.431"></a>
+<span class="sourceLineNo">432</span>   * Uses defaults.<a name="line.432"></a>
+<span class="sourceLineNo">433</span>   * @return a writer that won't overwrite files. Caller must close.<a name="line.433"></a>
+<span class="sourceLineNo">434</span>   */<a name="line.434"></a>
+<span class="sourceLineNo">435</span>  @VisibleForTesting<a name="line.435"></a>
+<span class="sourceLineNo">436</span>  public static Writer createWALWriter(final FileSystem fs, final Path path,<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      final Configuration configuration)<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      throws IOException {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    return FSHLogProvider.createWriter(configuration, fs, path, false);<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>  public final WALProvider getWALProvider() {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    return this.provider;<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>  public final WALProvider getMetaWALProvider() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    return this.metaProvider.get();<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>
 
 
 


[35/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html
index 92b4a06..c200d1b 100644
--- a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html
+++ b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.634">RSGroupInfoManagerImpl.ServerEventsListenerThread</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.618">RSGroupInfoManagerImpl.ServerEventsListenerThread</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/master/ServerListener.html" title="interface in org.apache.hadoop.hbase.master">ServerListener</a></pre>
 <div class="block">Calls <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#updateDefaultServers-java.util.SortedSet-"><code>RSGroupInfoManagerImpl.updateDefaultServers(SortedSet)</code></a> to update list of known
@@ -271,7 +271,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/ServerListener
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html#line.635">LOG</a></pre>
+<pre>private final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html#line.619">LOG</a></pre>
 </li>
 </ul>
 <a name="changed">
@@ -280,7 +280,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/ServerListener
 <ul class="blockListLast">
 <li class="blockList">
 <h4>changed</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html#line.636">changed</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html#line.620">changed</a></pre>
 </li>
 </ul>
 </li>
@@ -297,7 +297,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/ServerListener
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ServerEventsListenerThread</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html#line.638">ServerEventsListenerThread</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html#line.622">ServerEventsListenerThread</a>()</pre>
 </li>
 </ul>
 </li>
@@ -314,7 +314,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/ServerListener
 <ul class="blockList">
 <li class="blockList">
 <h4>serverAdded</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html#line.643">serverAdded</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html#line.627">serverAdded</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/ServerListener.html#serverAdded-org.apache.hadoop.hbase.ServerName-">ServerListener</a></code></span></div>
 <div class="block">The server has joined the cluster.</div>
 <dl>
@@ -331,7 +331,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/ServerListener
 <ul class="blockList">
 <li class="blockList">
 <h4>serverRemoved</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html#line.648">serverRemoved</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html#line.632">serverRemoved</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/ServerListener.html#serverRemoved-org.apache.hadoop.hbase.ServerName-">ServerListener</a></code></span></div>
 <div class="block">The server was removed from the cluster.</div>
 <dl>
@@ -348,7 +348,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/ServerListener
 <ul class="blockList">
 <li class="blockList">
 <h4>serverChanged</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html#line.652">serverChanged</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html#line.636">serverChanged</a>()</pre>
 </li>
 </ul>
 <a name="run--">
@@ -357,7 +357,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/ServerListener
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html#line.658">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html#line.642">run</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/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html
index 84af28d..89a918f 100644
--- a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-final class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.119">RSGroupInfoManagerImpl</a>
+final class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.115">RSGroupInfoManagerImpl</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>
 implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a></pre>
 <div class="block">This is an implementation of <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup"><code>RSGroupInfoManager</code></a> which makes
@@ -467,7 +467,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <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/rsgroup/RSGroupInfoManagerImpl.html#line.120">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.116">LOG</a></pre>
 </li>
 </ul>
 <a name="RSGROUP_TABLE_DESC">
@@ -476,7 +476,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>RSGROUP_TABLE_DESC</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.123">RSGROUP_TABLE_DESC</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.119">RSGROUP_TABLE_DESC</a></pre>
 <div class="block">Table descriptor for <code>hbase:rsgroup</code> catalog table</div>
 </li>
 </ul>
@@ -486,7 +486,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>rsGroupMap</h4>
-<pre>private volatile&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="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.139">rsGroupMap</a></pre>
+<pre>private volatile&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="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.135">rsGroupMap</a></pre>
 </li>
 </ul>
 <a name="tableMap">
@@ -495,7 +495,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>tableMap</h4>
-<pre>private volatile&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="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</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>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.140">tableMap</a></pre>
+<pre>private volatile&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="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</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>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.136">tableMap</a></pre>
 </li>
 </ul>
 <a name="masterServices">
@@ -504,7 +504,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>masterServices</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.142">masterServices</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.138">masterServices</a></pre>
 </li>
 </ul>
 <a name="rsGroupTable">
@@ -513,7 +513,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>rsGroupTable</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.143">rsGroupTable</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.139">rsGroupTable</a></pre>
 </li>
 </ul>
 <a name="conn">
@@ -522,7 +522,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>conn</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.144">conn</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.140">conn</a></pre>
 </li>
 </ul>
 <a name="watcher">
@@ -531,7 +531,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>watcher</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.145">watcher</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.141">watcher</a></pre>
 </li>
 </ul>
 <a name="rsGroupStartupWorker">
@@ -540,7 +540,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>rsGroupStartupWorker</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManagerImpl.RSGroupStartupWorker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.146">rsGroupStartupWorker</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.RSGroupStartupWorker.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManagerImpl.RSGroupStartupWorker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.142">rsGroupStartupWorker</a></pre>
 </li>
 </ul>
 <a name="prevRSGroups">
@@ -549,7 +549,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>prevRSGroups</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</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; <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.148">prevRSGroups</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</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; <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.144">prevRSGroups</a></pre>
 </li>
 </ul>
 <a name="serverEventsListenerThread">
@@ -558,7 +558,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>serverEventsListenerThread</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManagerImpl.ServerEventsListenerThread</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.149">serverEventsListenerThread</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManagerImpl.ServerEventsListenerThread</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.145">serverEventsListenerThread</a></pre>
 </li>
 </ul>
 <a name="failedOpenUpdaterThread">
@@ -567,7 +567,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>failedOpenUpdaterThread</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManagerImpl.FailedOpenUpdaterThread</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.151">failedOpenUpdaterThread</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManagerImpl.FailedOpenUpdaterThread</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.147">failedOpenUpdaterThread</a></pre>
 </li>
 </ul>
 </li>
@@ -584,7 +584,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RSGroupInfoManagerImpl</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.153">RSGroupInfoManagerImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.149">RSGroupInfoManagerImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)
                         throws <a href="https://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>
@@ -606,7 +606,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.159">init</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.155">init</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>
@@ -620,7 +620,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>getInstance</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.168">getInstance</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master)
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.164">getInstance</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master)
                                throws <a href="https://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>
@@ -634,7 +634,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.174">start</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.170">start</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html#start--">start</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a></code></dd>
@@ -647,7 +647,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>addRSGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.180">addRSGroup</a>(<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;rsGroupInfo)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.176">addRSGroup</a>(<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;rsGroupInfo)
                 throws <a href="https://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 interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html#addRSGroup-org.apache.hadoop.hbase.rsgroup.RSGroupInfo-">RSGroupInfoManager</a></code></span></div>
 <div class="block">Add given RSGroupInfo to existing list of group infos.</div>
@@ -665,7 +665,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSGroupInfo</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.191">getRSGroupInfo</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;groupName)
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.187">getRSGroupInfo</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;groupName)
                             throws <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html" title="class in org.apache.hadoop.hbase">DoNotRetryIOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -679,7 +679,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>moveServers</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.200">moveServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.196">moveServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&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;srcGroup,
                                 <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;dstGroup)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -705,7 +705,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSGroupOfServer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.229">getRSGroupOfServer</a>(<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&nbsp;serverHostPort)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.225">getRSGroupOfServer</a>(<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&nbsp;serverHostPort)
                                throws <a href="https://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 interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html#getRSGroupOfServer-org.apache.hadoop.hbase.net.Address-">RSGroupInfoManager</a></code></span></div>
 <div class="block">Gets the group info of server.</div>
@@ -723,7 +723,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSGroup</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.239">getRSGroup</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;groupName)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.235">getRSGroup</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;groupName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html#getRSGroup-java.lang.String-">RSGroupInfoManager</a></code></span></div>
 <div class="block">Gets <code>RSGroupInfo</code> for the given group name.</div>
 <dl>
@@ -738,7 +738,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSGroupOfTable</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/rsgroup/RSGroupInfoManagerImpl.html#line.244">getRSGroupOfTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</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/rsgroup/RSGroupInfoManagerImpl.html#line.240">getRSGroupOfTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html#getRSGroupOfTable-org.apache.hadoop.hbase.TableName-">RSGroupInfoManager</a></code></span></div>
 <div class="block">Get the group membership of a table</div>
 <dl>
@@ -753,7 +753,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>moveTables</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.249">moveTables</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tableNames,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.245">moveTables</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tableNames,
                        <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;groupName)
                 throws <a href="https://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 interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html#moveTables-java.util.Set-java.lang.String-">RSGroupInfoManager</a></code></span></div>
@@ -775,7 +775,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>removeRSGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.272">removeRSGroup</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;groupName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.268">removeRSGroup</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;groupName)
                    throws <a href="https://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 interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html#removeRSGroup-java.lang.String-">RSGroupInfoManager</a></code></span></div>
 <div class="block">Remove a region server group.</div>
@@ -793,7 +793,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>listRSGroups</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="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.283">listRSGroups</a>()</pre>
+<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="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.279">listRSGroups</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html#listRSGroups--">RSGroupInfoManager</a></code></span></div>
 <div class="block">List the existing <code>RSGroupInfo</code>s.</div>
 <dl>
@@ -808,7 +808,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>isOnline</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.288">isOnline</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.284">isOnline</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html#isOnline--">RSGroupInfoManager</a></code></span></div>
 <div class="block">Whether the manager is able to fully return group metadata</div>
 <dl>
@@ -825,7 +825,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>moveServersAndTables</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.293">moveServersAndTables</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.289">moveServersAndTables</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tables,
                                  <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;srcGroup,
                                  <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;dstGroup)
@@ -851,7 +851,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>removeServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.318">removeServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.314">removeServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html#removeServers-java.util.Set-">RSGroupInfoManager</a></code></span></div>
 <div class="block">Remove decommissioned servers from rsgroup</div>
@@ -871,7 +871,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>retrieveGroupListFromGroupTable</h4>
-<pre><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="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.343">retrieveGroupListFromGroupTable</a>()
+<pre><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="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.339">retrieveGroupListFromGroupTable</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>
@@ -885,7 +885,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>retrieveGroupListFromZookeeper</h4>
-<pre><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="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.353">retrieveGroupListFromZookeeper</a>()
+<pre><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="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.349">retrieveGroupListFromZookeeper</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>
@@ -899,7 +899,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>refresh</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.382">refresh</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.378">refresh</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 interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html#refresh--">RSGroupInfoManager</a></code></span></div>
 <div class="block">Refresh/reload the group information from the persistent store</div>
@@ -917,7 +917,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>refresh</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.390">refresh</a>(boolean&nbsp;forceOnline)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.386">refresh</a>(boolean&nbsp;forceOnline)
               throws <a href="https://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">Read rsgroup info from the source of truth, the hbase:rsgroup table.
  Update zk cache. Called on startup of the manager.</div>
@@ -933,7 +933,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>flushConfigTable</h4>
-<pre>private&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="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</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>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.447">flushConfigTable</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/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;groupMap)
+<pre>private&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="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</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>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.431">flushConfigTable</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/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;groupMap)
                                         throws <a href="https://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>
@@ -947,7 +947,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>flushConfig</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.477">flushConfig</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.461">flushConfig</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>
@@ -961,7 +961,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>flushConfig</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.482">flushConfig</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/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;newGroupMap)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.466">flushConfig</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/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;newGroupMap)
                   throws <a href="https://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>
@@ -975,7 +975,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>resetRSGroupAndTableMaps</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.543">resetRSGroupAndTableMaps</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/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;newRSGroupMap,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.527">resetRSGroupAndTableMaps</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/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;newRSGroupMap,
                                       <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="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</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>&gt;&nbsp;newTableMap)</pre>
 <div class="block">Make changes visible.
  Caller must be synchronized on 'this'.</div>
@@ -987,7 +987,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>updateCacheOfRSGroups</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.555">updateCacheOfRSGroups</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</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;currentGroups)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.539">updateCacheOfRSGroups</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</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;currentGroups)</pre>
 <div class="block">Update cache of rsgroups.
  Caller must be synchronized on 'this'.</div>
 <dl>
@@ -1002,7 +1002,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRS</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;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.561">getOnlineRS</a>()
+<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;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.545">getOnlineRS</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>
@@ -1016,7 +1016,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>getDefaultServers</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.578">getDefaultServers</a>()
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.562">getDefaultServers</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>
@@ -1030,7 +1030,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>updateDefaultServers</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.600">updateDefaultServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.584">updateDefaultServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&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>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1044,7 +1044,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>updateFailedAssignments</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.609">updateFailedAssignments</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.593">updateFailedAssignments</a>()</pre>
 </li>
 </ul>
 <a name="isMasterRunning-org.apache.hadoop.hbase.master.MasterServices-">
@@ -1053,7 +1053,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>isMasterRunning</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.903">isMasterRunning</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</pre>
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.887">isMasterRunning</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</pre>
 </li>
 </ul>
 <a name="multiMutate-java.util.List-">
@@ -1062,7 +1062,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockList">
 <li class="blockList">
 <h4>multiMutate</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.907">multiMutate</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;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;mutations)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.891">multiMutate</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;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;mutations)
                   throws <a href="https://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>
@@ -1076,7 +1076,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoMa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>checkGroupName</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.936">checkGroupName</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;groupName)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#line.920">checkGroupName</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;groupName)
                      throws <a href="../../../../../org/apache/hadoop/hbase/constraint/ConstraintException.html" title="class in org.apache.hadoop.hbase.constraint">ConstraintException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
----------------------------------------------------------------------
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 f6d74ff..5a7e325 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -137,9 +137,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.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/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/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index 67b7e3a..7ba3a64 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -192,8 +192,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/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>
 <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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 41c2191..272b207 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -198,9 +198,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.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>
 <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/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftServerRunner.ImplType</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>
 </ul>


[13/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html
index 54b1f96..ed95cbf 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.FailedOpenUpdaterThread.html
@@ -31,922 +31,906 @@
 <span class="sourceLineNo">023</span>import java.io.ByteArrayInputStream;<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.ArrayList;<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.Collections;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.HashSet;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.LinkedList;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.List;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.Map;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.NavigableSet;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Set;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.SortedSet;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.TreeSet;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.Cell;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.Coprocessor;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.HConstants;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.MetaTableAccessor.DefaultVisitorBase;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.ServerName;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.client.Get;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.client.Put;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.client.Result;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.Table;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.constraint.ConstraintException;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.master.ServerListener;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.net.Address;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.protobuf.ProtobufMagic;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.protobuf.generated.MultiRowMutationProtos;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupProtos;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.quotas.QuotaTableUtil;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.security.access.AccessControlLists;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.zookeeper.KeeperException;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.slf4j.Logger;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.slf4j.LoggerFactory;<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<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> * This is an implementation of {@link RSGroupInfoManager} which makes<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * use of an HBase table as the persistence store for the group information.<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * It also makes use of zookeeper to store group information needed<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * for bootstrapping during offline mode.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> *<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * &lt;h2&gt;Concurrency&lt;/h2&gt;<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * RSGroup state is kept locally in Maps. There is a rsgroup name to cached<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * RSGroupInfo Map at {@link #rsGroupMap} and a Map of tables to the name of the<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * rsgroup they belong too (in {@link #tableMap}). These Maps are persisted to the<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * hbase:rsgroup table (and cached in zk) on each modification.<a name="line.104"></a>
-<span class="sourceLineNo">105</span> *<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * &lt;p&gt;Mutations on state are synchronized but reads can continue without having<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * to wait on an instance monitor, mutations do wholesale replace of the Maps on<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * update -- Copy-On-Write; the local Maps of state are read-only, just-in-case<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * (see flushConfig).<a name="line.109"></a>
-<span class="sourceLineNo">110</span> *<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * &lt;p&gt;Reads must not block else there is a danger we'll deadlock.<a name="line.111"></a>
-<span class="sourceLineNo">112</span> *<a name="line.112"></a>
-<span class="sourceLineNo">113</span> * &lt;p&gt;Clients of this class, the {@link RSGroupAdminEndpoint} for example, want to query and<a name="line.113"></a>
-<span class="sourceLineNo">114</span> * then act on the results of the query modifying cache in zookeeper without another thread<a name="line.114"></a>
-<span class="sourceLineNo">115</span> * making intermediate modifications. These clients synchronize on the 'this' instance so<a name="line.115"></a>
-<span class="sourceLineNo">116</span> * no other has access concurrently. Reads must be able to continue concurrently.<a name="line.116"></a>
-<span class="sourceLineNo">117</span> */<a name="line.117"></a>
-<span class="sourceLineNo">118</span>@InterfaceAudience.Private<a name="line.118"></a>
-<span class="sourceLineNo">119</span>final class RSGroupInfoManagerImpl implements RSGroupInfoManager {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  private static final Logger LOG = LoggerFactory.getLogger(RSGroupInfoManagerImpl.class);<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  /** Table descriptor for &lt;code&gt;hbase:rsgroup&lt;/code&gt; catalog table */<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private final static HTableDescriptor RSGROUP_TABLE_DESC;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  static {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    RSGROUP_TABLE_DESC = new HTableDescriptor(RSGROUP_TABLE_NAME);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    RSGROUP_TABLE_DESC.addFamily(new HColumnDescriptor(META_FAMILY_BYTES));<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    RSGROUP_TABLE_DESC.setRegionSplitPolicyClassName(DisabledRegionSplitPolicy.class.getName());<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    try {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      RSGROUP_TABLE_DESC.addCoprocessor(<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        MultiRowMutationEndpoint.class.getName(),<a name="line.130"></a>
-<span class="sourceLineNo">131</span>          null, Coprocessor.PRIORITY_SYSTEM, null);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    } catch (IOException ex) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      throw new RuntimeException(ex);<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><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  // There two Maps are immutable and wholesale replaced on each modification<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  // so are safe to access concurrently. See class comment.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private volatile Map&lt;String, RSGroupInfo&gt; rsGroupMap = Collections.emptyMap();<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  private volatile Map&lt;TableName, String&gt; tableMap = Collections.emptyMap();<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private final MasterServices masterServices;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  private Table rsGroupTable;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final ClusterConnection conn;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final ZKWatcher watcher;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  private final RSGroupStartupWorker rsGroupStartupWorker = new RSGroupStartupWorker();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  // contains list of groups that were last flushed to persistent store<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private Set&lt;String&gt; prevRSGroups = new HashSet&lt;&gt;();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private final ServerEventsListenerThread serverEventsListenerThread =<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      new ServerEventsListenerThread();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private FailedOpenUpdaterThread failedOpenUpdaterThread;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  private RSGroupInfoManagerImpl(MasterServices masterServices) throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    this.masterServices = masterServices;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    this.watcher = masterServices.getZooKeeper();<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    this.conn = masterServices.getClusterConnection();<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>  private synchronized void init() throws IOException{<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    refresh();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    serverEventsListenerThread.start();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    masterServices.getServerManager().registerListener(serverEventsListenerThread);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    failedOpenUpdaterThread = new FailedOpenUpdaterThread(masterServices.getConfiguration());<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    failedOpenUpdaterThread.start();<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    masterServices.getServerManager().registerListener(failedOpenUpdaterThread);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  static RSGroupInfoManager getInstance(MasterServices master) throws IOException {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    RSGroupInfoManagerImpl instance = new RSGroupInfoManagerImpl(master);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    instance.init();<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    return instance;<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>  public void start(){<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    // create system table of rsgroup<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    rsGroupStartupWorker.start();<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 synchronized void addRSGroup(RSGroupInfo rsGroupInfo) throws IOException {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    checkGroupName(rsGroupInfo.getName());<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    if (rsGroupMap.get(rsGroupInfo.getName()) != null ||<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        rsGroupInfo.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      throw new DoNotRetryIOException("Group already exists: "+ rsGroupInfo.getName());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    Map&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    newGroupMap.put(rsGroupInfo.getName(), rsGroupInfo);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    flushConfig(newGroupMap);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>  private RSGroupInfo getRSGroupInfo(final String groupName) throws DoNotRetryIOException {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    RSGroupInfo rsGroupInfo = getRSGroup(groupName);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    if (rsGroupInfo == null) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      throw new DoNotRetryIOException("RSGroup " + groupName + " does not exist");<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    return rsGroupInfo;<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 synchronized Set&lt;Address&gt; moveServers(Set&lt;Address&gt; servers, String srcGroup,<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      String dstGroup) throws IOException {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    RSGroupInfo src = getRSGroupInfo(srcGroup);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    RSGroupInfo dst = getRSGroupInfo(dstGroup);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    // If destination is 'default' rsgroup, only add servers that are online. If not online, drop<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    // it. If not 'default' group, add server to 'dst' rsgroup EVEN IF IT IS NOT online (could be a<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    // rsgroup of dead servers that are to come back later).<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    Set&lt;Address&gt; onlineServers = dst.getName().equals(RSGroupInfo.DEFAULT_GROUP)?<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        Utility.getOnlineServers(this.masterServices): null;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    for (Address el: servers) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      src.removeServer(el);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (onlineServers != null) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        if (!onlineServers.contains(el)) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          if (LOG.isDebugEnabled()) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>            LOG.debug("Dropping " + el + " during move-to-default rsgroup because not online");<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          continue;<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>      dst.addServer(el);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    newGroupMap.put(src.getName(), src);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    newGroupMap.put(dst.getName(), dst);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    flushConfig(newGroupMap);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    return dst.getServers();<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 RSGroupInfo getRSGroupOfServer(Address serverHostPort) throws IOException {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    for (RSGroupInfo info: rsGroupMap.values()) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      if (info.containsServer(serverHostPort)) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        return info;<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>    return null;<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>  @Override<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  public RSGroupInfo getRSGroup(String groupName) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    return rsGroupMap.get(groupName);<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>  @Override<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  public String getRSGroupOfTable(TableName tableName) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    return tableMap.get(tableName);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>  @Override<a name="line.248"></a>
-<span class="sourceLineNo">249</span>  public synchronized void moveTables(Set&lt;TableName&gt; tableNames, String groupName)<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      throws IOException {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    if (groupName != null &amp;&amp; !rsGroupMap.containsKey(groupName)) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      throw new DoNotRetryIOException("Group "+groupName+" does not exist or is a special group");<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>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    for(TableName tableName: tableNames) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      if (tableMap.containsKey(tableName)) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        RSGroupInfo src = new RSGroupInfo(newGroupMap.get(tableMap.get(tableName)));<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        src.removeTable(tableName);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        newGroupMap.put(src.getName(), src);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      if(groupName != null) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        RSGroupInfo dst = new RSGroupInfo(newGroupMap.get(groupName));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        dst.addTable(tableName);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        newGroupMap.put(dst.getName(), dst);<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>    flushConfig(newGroupMap);<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>  @Override<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  public synchronized void removeRSGroup(String groupName) throws IOException {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (!rsGroupMap.containsKey(groupName) || groupName.equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      throw new DoNotRetryIOException("Group " + groupName + " does not exist or is a reserved "<a name="line.274"></a>
-<span class="sourceLineNo">275</span>          + "group");<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    newGroupMap.remove(groupName);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    flushConfig(newGroupMap);<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>  @Override<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public List&lt;RSGroupInfo&gt; listRSGroups() {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    return Lists.newLinkedList(rsGroupMap.values());<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 boolean isOnline() {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    return rsGroupStartupWorker.isOnline();<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 void moveServersAndTables(Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables,<a name="line.293"></a>
-<span class="sourceLineNo">294</span>                                   String srcGroup, String dstGroup) throws IOException {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    //get server's group<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    RSGroupInfo srcGroupInfo = getRSGroupInfo(srcGroup);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    RSGroupInfo dstGroupInfo = getRSGroupInfo(dstGroup);<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>    //move servers<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    for (Address el: servers) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      srcGroupInfo.removeServer(el);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      dstGroupInfo.addServer(el);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    //move tables<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    for(TableName tableName: tables) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      srcGroupInfo.removeTable(tableName);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      dstGroupInfo.addTable(tableName);<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>    //flush changed groupinfo<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    newGroupMap.put(srcGroupInfo.getName(), srcGroupInfo);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    newGroupMap.put(dstGroupInfo.getName(), dstGroupInfo);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    flushConfig(newGroupMap);<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 synchronized void removeServers(Set&lt;Address&gt; servers) throws IOException {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    Map&lt;String, RSGroupInfo&gt; rsGroupInfos = new HashMap&lt;String, RSGroupInfo&gt;();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    for (Address el: servers) {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      RSGroupInfo rsGroupInfo = getRSGroupOfServer(el);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      if (rsGroupInfo != null) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>        RSGroupInfo newRsGroupInfo = rsGroupInfos.get(rsGroupInfo.getName());<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        if (newRsGroupInfo == null) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>          rsGroupInfo.removeServer(el);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>          rsGroupInfos.put(rsGroupInfo.getName(), rsGroupInfo);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        } else {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>          newRsGroupInfo.removeServer(el);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>          rsGroupInfos.put(newRsGroupInfo.getName(), newRsGroupInfo);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      }else {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        LOG.warn("Server " + el + " does not belong to any rsgroup.");<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>    if (rsGroupInfos.size() &gt; 0) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      Map&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      newGroupMap.putAll(rsGroupInfos);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      flushConfig(newGroupMap);<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><a name="line.342"></a>
-<span class="sourceLineNo">343</span>  List&lt;RSGroupInfo&gt; retrieveGroupListFromGroupTable() throws IOException {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    List&lt;RSGroupInfo&gt; rsGroupInfoList = Lists.newArrayList();<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    for (Result result : rsGroupTable.getScanner(new Scan())) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      RSGroupProtos.RSGroupInfo proto = RSGroupProtos.RSGroupInfo.parseFrom(<a name="line.346"></a>
-<span class="sourceLineNo">347</span>              result.getValue(META_FAMILY_BYTES, META_QUALIFIER_BYTES));<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      rsGroupInfoList.add(RSGroupProtobufUtil.toGroupInfo(proto));<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    return rsGroupInfoList;<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>  List&lt;RSGroupInfo&gt; retrieveGroupListFromZookeeper() throws IOException {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    List&lt;RSGroupInfo&gt; RSGroupInfoList = Lists.newArrayList();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    //Overwrite any info stored by table, this takes precedence<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    try {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      if(ZKUtil.checkExists(watcher, groupBasePath) != -1) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        List&lt;String&gt; children = ZKUtil.listChildrenAndWatchForNewChildren(watcher, groupBasePath);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (children == null) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          return RSGroupInfoList;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        for(String znode: children) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          byte[] data = ZKUtil.getData(watcher, ZNodePaths.joinZNode(groupBasePath, znode));<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          if(data.length &gt; 0) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>            ProtobufUtil.expectPBMagicPrefix(data);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            ByteArrayInputStream bis = new ByteArrayInputStream(<a name="line.367"></a>
-<span class="sourceLineNo">368</span>                data, ProtobufUtil.lengthOfPBMagic(), data.length);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>            RSGroupInfoList.add(RSGroupProtobufUtil.toGroupInfo(<a name="line.369"></a>
-<span class="sourceLineNo">370</span>                RSGroupProtos.RSGroupInfo.parseFrom(bis)));<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        }<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        LOG.debug("Read ZK GroupInfo count:" + RSGroupInfoList.size());<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      }<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    } catch (KeeperException|DeserializationException|InterruptedException e) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      throw new IOException("Failed to read rsGroupZNode",e);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    return RSGroupInfoList;<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>  @Override<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  public void refresh() throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    refresh(false);<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>   * Read rsgroup info from the source of truth, the hbase:rsgroup table.<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * Update zk cache. Called on startup of the manager.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   */<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  private synchronized void refresh(boolean forceOnline) throws IOException {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    List&lt;RSGroupInfo&gt; groupList = new LinkedList&lt;&gt;();<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>    // Overwrite anything read from zk, group table is source of truth<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    // if online read from GROUP table<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    if (forceOnline || isOnline()) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      LOG.debug("Refreshing in Online mode.");<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      if (rsGroupTable == null) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        rsGroupTable = conn.getTable(RSGROUP_TABLE_NAME);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      groupList.addAll(retrieveGroupListFromGroupTable());<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      LOG.debug("Refreshing in Offline mode.");<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      groupList.addAll(retrieveGroupListFromZookeeper());<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>    // refresh default group, prune<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    NavigableSet&lt;TableName&gt; orphanTables = new TreeSet&lt;&gt;();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    for(String entry: masterServices.getTableDescriptors().getAll().keySet()) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      orphanTables.add(TableName.valueOf(entry));<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>
-<span class="sourceLineNo">412</span>    List&lt;TableName&gt; specialTables =<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        new ArrayList&lt;TableName&gt;(Arrays.asList(AccessControlLists.ACL_TABLE_NAME,<a name="line.413"></a>
-<span class="sourceLineNo">414</span>          TableName.META_TABLE_NAME, TableName.NAMESPACE_TABLE_NAME, RSGROUP_TABLE_NAME));<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    // if quota is enabled, add corresponding system table to special tables list<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    if (QuotaUtil.isQuotaEnabled(conn.getConfiguration())) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      specialTables.add(QuotaTableUtil.QUOTA_TABLE_NAME);<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>    for (TableName table : specialTables) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      orphanTables.add(table);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    for (RSGroupInfo group: groupList) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      if(!group.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        orphanTables.removeAll(group.getTables());<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><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // This is added to the last of the list so it overwrites the 'default' rsgroup loaded<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    // from region group table or zk<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    groupList.add(new RSGroupInfo(RSGroupInfo.DEFAULT_GROUP, getDefaultServers(),<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        orphanTables));<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // populate the data<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    HashMap&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    HashMap&lt;TableName, String&gt; newTableMap = Maps.newHashMap();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    for (RSGroupInfo group : groupList) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      newGroupMap.put(group.getName(), group);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      for(TableName table: group.getTables()) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        newTableMap.put(table, group.getName());<a name="line.440"></a>
+<span class="sourceLineNo">026</span>import java.util.Collections;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.HashMap;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.HashSet;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.LinkedList;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.List;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.Map;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.NavigableSet;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.Set;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.SortedSet;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.TreeSet;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.Cell;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.Coprocessor;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HConstants;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.MetaTableAccessor.DefaultVisitorBase;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ServerName;<a name="line.48"></a>
+<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.client.ClusterConnection;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.Get;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.client.Put;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.client.Result;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.Table;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.constraint.ConstraintException;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.master.ServerListener;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.net.Address;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.protobuf.ProtobufMagic;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.protobuf.generated.MultiRowMutationProtos;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupProtos;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.zookeeper.KeeperException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.slf4j.Logger;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.slf4j.LoggerFactory;<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>/**<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * This is an implementation of {@link RSGroupInfoManager} which makes<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * use of an HBase table as the persistence store for the group information.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * It also makes use of zookeeper to store group information needed<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * for bootstrapping during offline mode.<a name="line.94"></a>
+<span class="sourceLineNo">095</span> *<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * &lt;h2&gt;Concurrency&lt;/h2&gt;<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * RSGroup state is kept locally in Maps. There is a rsgroup name to cached<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * RSGroupInfo Map at {@link #rsGroupMap} and a Map of tables to the name of the<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * rsgroup they belong too (in {@link #tableMap}). These Maps are persisted to the<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * hbase:rsgroup table (and cached in zk) on each modification.<a name="line.100"></a>
+<span class="sourceLineNo">101</span> *<a name="line.101"></a>
+<span class="sourceLineNo">102</span> * &lt;p&gt;Mutations on state are synchronized but reads can continue without having<a name="line.102"></a>
+<span class="sourceLineNo">103</span> * to wait on an instance monitor, mutations do wholesale replace of the Maps on<a name="line.103"></a>
+<span class="sourceLineNo">104</span> * update -- Copy-On-Write; the local Maps of state are read-only, just-in-case<a name="line.104"></a>
+<span class="sourceLineNo">105</span> * (see flushConfig).<a name="line.105"></a>
+<span class="sourceLineNo">106</span> *<a name="line.106"></a>
+<span class="sourceLineNo">107</span> * &lt;p&gt;Reads must not block else there is a danger we'll deadlock.<a name="line.107"></a>
+<span class="sourceLineNo">108</span> *<a name="line.108"></a>
+<span class="sourceLineNo">109</span> * &lt;p&gt;Clients of this class, the {@link RSGroupAdminEndpoint} for example, want to query and<a name="line.109"></a>
+<span class="sourceLineNo">110</span> * then act on the results of the query modifying cache in zookeeper without another thread<a name="line.110"></a>
+<span class="sourceLineNo">111</span> * making intermediate modifications. These clients synchronize on the 'this' instance so<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * no other has access concurrently. Reads must be able to continue concurrently.<a name="line.112"></a>
+<span class="sourceLineNo">113</span> */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>@InterfaceAudience.Private<a name="line.114"></a>
+<span class="sourceLineNo">115</span>final class RSGroupInfoManagerImpl implements RSGroupInfoManager {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private static final Logger LOG = LoggerFactory.getLogger(RSGroupInfoManagerImpl.class);<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  /** Table descriptor for &lt;code&gt;hbase:rsgroup&lt;/code&gt; catalog table */<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  private final static HTableDescriptor RSGROUP_TABLE_DESC;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  static {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    RSGROUP_TABLE_DESC = new HTableDescriptor(RSGROUP_TABLE_NAME);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    RSGROUP_TABLE_DESC.addFamily(new HColumnDescriptor(META_FAMILY_BYTES));<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    RSGROUP_TABLE_DESC.setRegionSplitPolicyClassName(DisabledRegionSplitPolicy.class.getName());<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    try {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      RSGROUP_TABLE_DESC.addCoprocessor(<a name="line.125"></a>
+<span class="sourceLineNo">126</span>        MultiRowMutationEndpoint.class.getName(),<a name="line.126"></a>
+<span class="sourceLineNo">127</span>          null, Coprocessor.PRIORITY_SYSTEM, null);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    } catch (IOException ex) {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      throw new RuntimeException(ex);<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>  // There two Maps are immutable and wholesale replaced on each modification<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  // so are safe to access concurrently. See class comment.<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private volatile Map&lt;String, RSGroupInfo&gt; rsGroupMap = Collections.emptyMap();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  private volatile Map&lt;TableName, String&gt; tableMap = Collections.emptyMap();<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  private final MasterServices masterServices;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  private Table rsGroupTable;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private final ClusterConnection conn;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  private final ZKWatcher watcher;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  private final RSGroupStartupWorker rsGroupStartupWorker = new RSGroupStartupWorker();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  // contains list of groups that were last flushed to persistent store<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  private Set&lt;String&gt; prevRSGroups = new HashSet&lt;&gt;();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private final ServerEventsListenerThread serverEventsListenerThread =<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      new ServerEventsListenerThread();<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  private FailedOpenUpdaterThread failedOpenUpdaterThread;<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private RSGroupInfoManagerImpl(MasterServices masterServices) throws IOException {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    this.masterServices = masterServices;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    this.watcher = masterServices.getZooKeeper();<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    this.conn = masterServices.getClusterConnection();<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>  private synchronized void init() throws IOException{<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    refresh();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    serverEventsListenerThread.start();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    masterServices.getServerManager().registerListener(serverEventsListenerThread);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    failedOpenUpdaterThread = new FailedOpenUpdaterThread(masterServices.getConfiguration());<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    failedOpenUpdaterThread.start();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    masterServices.getServerManager().registerListener(failedOpenUpdaterThread);<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>  static RSGroupInfoManager getInstance(MasterServices master) throws IOException {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    RSGroupInfoManagerImpl instance = new RSGroupInfoManagerImpl(master);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    instance.init();<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    return instance;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  public void start(){<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // create system table of rsgroup<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    rsGroupStartupWorker.start();<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 synchronized void addRSGroup(RSGroupInfo rsGroupInfo) throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    checkGroupName(rsGroupInfo.getName());<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    if (rsGroupMap.get(rsGroupInfo.getName()) != null ||<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        rsGroupInfo.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      throw new DoNotRetryIOException("Group already exists: "+ rsGroupInfo.getName());<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    Map&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    newGroupMap.put(rsGroupInfo.getName(), rsGroupInfo);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    flushConfig(newGroupMap);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private RSGroupInfo getRSGroupInfo(final String groupName) throws DoNotRetryIOException {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    RSGroupInfo rsGroupInfo = getRSGroup(groupName);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    if (rsGroupInfo == null) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      throw new DoNotRetryIOException("RSGroup " + groupName + " does not exist");<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    return rsGroupInfo;<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>  @Override<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  public synchronized Set&lt;Address&gt; moveServers(Set&lt;Address&gt; servers, String srcGroup,<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      String dstGroup) throws IOException {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    RSGroupInfo src = getRSGroupInfo(srcGroup);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    RSGroupInfo dst = getRSGroupInfo(dstGroup);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    // If destination is 'default' rsgroup, only add servers that are online. If not online, drop<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // it. If not 'default' group, add server to 'dst' rsgroup EVEN IF IT IS NOT online (could be a<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // rsgroup of dead servers that are to come back later).<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    Set&lt;Address&gt; onlineServers = dst.getName().equals(RSGroupInfo.DEFAULT_GROUP)?<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        Utility.getOnlineServers(this.masterServices): null;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    for (Address el: servers) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      src.removeServer(el);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      if (onlineServers != null) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        if (!onlineServers.contains(el)) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>          if (LOG.isDebugEnabled()) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>            LOG.debug("Dropping " + el + " during move-to-default rsgroup because not online");<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          }<a name="line.211"></a>
+<span class="sourceLineNo">212</span>          continue;<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>      dst.addServer(el);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    newGroupMap.put(src.getName(), src);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    newGroupMap.put(dst.getName(), dst);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    flushConfig(newGroupMap);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    return dst.getServers();<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 RSGroupInfo getRSGroupOfServer(Address serverHostPort) throws IOException {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    for (RSGroupInfo info: rsGroupMap.values()) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      if (info.containsServer(serverHostPort)) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        return info;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      }<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    return null;<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>  public RSGroupInfo getRSGroup(String groupName) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return rsGroupMap.get(groupName);<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>  @Override<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  public String getRSGroupOfTable(TableName tableName) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    return tableMap.get(tableName);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>  @Override<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  public synchronized void moveTables(Set&lt;TableName&gt; tableNames, String groupName)<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      throws IOException {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    if (groupName != null &amp;&amp; !rsGroupMap.containsKey(groupName)) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      throw new DoNotRetryIOException("Group "+groupName+" does not exist");<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>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    for(TableName tableName: tableNames) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      if (tableMap.containsKey(tableName)) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        RSGroupInfo src = new RSGroupInfo(newGroupMap.get(tableMap.get(tableName)));<a name="line.254"></a>
+<span class="sourceLineNo">255</span>        src.removeTable(tableName);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        newGroupMap.put(src.getName(), src);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      if(groupName != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        RSGroupInfo dst = new RSGroupInfo(newGroupMap.get(groupName));<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        dst.addTable(tableName);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        newGroupMap.put(dst.getName(), dst);<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>    flushConfig(newGroupMap);<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>  @Override<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  public synchronized void removeRSGroup(String groupName) throws IOException {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    if (!rsGroupMap.containsKey(groupName) || groupName.equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      throw new DoNotRetryIOException("Group " + groupName + " does not exist or is a reserved "<a name="line.270"></a>
+<span class="sourceLineNo">271</span>          + "group");<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    newGroupMap.remove(groupName);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    flushConfig(newGroupMap);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>  @Override<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  public List&lt;RSGroupInfo&gt; listRSGroups() {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    return Lists.newLinkedList(rsGroupMap.values());<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>  @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  public boolean isOnline() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    return rsGroupStartupWorker.isOnline();<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
+<span class="sourceLineNo">287</span><a name="line.287"></a>
+<span class="sourceLineNo">288</span>  @Override<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  public void moveServersAndTables(Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables,<a name="line.289"></a>
+<span class="sourceLineNo">290</span>                                   String srcGroup, String dstGroup) throws IOException {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    //get server's group<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    RSGroupInfo srcGroupInfo = getRSGroupInfo(srcGroup);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    RSGroupInfo dstGroupInfo = getRSGroupInfo(dstGroup);<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    //move servers<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    for (Address el: servers) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      srcGroupInfo.removeServer(el);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      dstGroupInfo.addServer(el);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    //move tables<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    for(TableName tableName: tables) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      srcGroupInfo.removeTable(tableName);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      dstGroupInfo.addTable(tableName);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>    //flush changed groupinfo<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    newGroupMap.put(srcGroupInfo.getName(), srcGroupInfo);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    newGroupMap.put(dstGroupInfo.getName(), dstGroupInfo);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    flushConfig(newGroupMap);<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 synchronized void removeServers(Set&lt;Address&gt; servers) throws IOException {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    Map&lt;String, RSGroupInfo&gt; rsGroupInfos = new HashMap&lt;String, RSGroupInfo&gt;();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    for (Address el: servers) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      RSGroupInfo rsGroupInfo = getRSGroupOfServer(el);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      if (rsGroupInfo != null) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        RSGroupInfo newRsGroupInfo = rsGroupInfos.get(rsGroupInfo.getName());<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        if (newRsGroupInfo == null) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          rsGroupInfo.removeServer(el);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          rsGroupInfos.put(rsGroupInfo.getName(), rsGroupInfo);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        } else {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          newRsGroupInfo.removeServer(el);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>          rsGroupInfos.put(newRsGroupInfo.getName(), newRsGroupInfo);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      }else {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        LOG.warn("Server " + el + " does not belong to any rsgroup.");<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    if (rsGroupInfos.size() &gt; 0) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      Map&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      newGroupMap.putAll(rsGroupInfos);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      flushConfig(newGroupMap);<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><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  List&lt;RSGroupInfo&gt; retrieveGroupListFromGroupTable() throws IOException {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    List&lt;RSGroupInfo&gt; rsGroupInfoList = Lists.newArrayList();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    for (Result result : rsGroupTable.getScanner(new Scan())) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      RSGroupProtos.RSGroupInfo proto = RSGroupProtos.RSGroupInfo.parseFrom(<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              result.getValue(META_FAMILY_BYTES, META_QUALIFIER_BYTES));<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      rsGroupInfoList.add(RSGroupProtobufUtil.toGroupInfo(proto));<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    return rsGroupInfoList;<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>  List&lt;RSGroupInfo&gt; retrieveGroupListFromZookeeper() throws IOException {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    List&lt;RSGroupInfo&gt; RSGroupInfoList = Lists.newArrayList();<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    //Overwrite any info stored by table, this takes precedence<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    try {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      if(ZKUtil.checkExists(watcher, groupBasePath) != -1) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        List&lt;String&gt; children = ZKUtil.listChildrenAndWatchForNewChildren(watcher, groupBasePath);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        if (children == null) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>          return RSGroupInfoList;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        for(String znode: children) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          byte[] data = ZKUtil.getData(watcher, ZNodePaths.joinZNode(groupBasePath, znode));<a name="line.360"></a>
+<span class="sourceLineNo">361</span>          if(data.length &gt; 0) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>            ProtobufUtil.expectPBMagicPrefix(data);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>            ByteArrayInputStream bis = new ByteArrayInputStream(<a name="line.363"></a>
+<span class="sourceLineNo">364</span>                data, ProtobufUtil.lengthOfPBMagic(), data.length);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>            RSGroupInfoList.add(RSGroupProtobufUtil.toGroupInfo(<a name="line.365"></a>
+<span class="sourceLineNo">366</span>                RSGroupProtos.RSGroupInfo.parseFrom(bis)));<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>        LOG.debug("Read ZK GroupInfo count:" + RSGroupInfoList.size());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    } catch (KeeperException|DeserializationException|InterruptedException e) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      throw new IOException("Failed to read rsGroupZNode",e);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    return RSGroupInfoList;<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 void refresh() throws IOException {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    refresh(false);<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>   * Read rsgroup info from the source of truth, the hbase:rsgroup table.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * Update zk cache. Called on startup of the manager.<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   */<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  private synchronized void refresh(boolean forceOnline) throws IOException {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    List&lt;RSGroupInfo&gt; groupList = new LinkedList&lt;&gt;();<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span>    // Overwrite anything read from zk, group table is source of truth<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    // if online read from GROUP table<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    if (forceOnline || isOnline()) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      LOG.debug("Refreshing in Online mode.");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      if (rsGroupTable == null) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        rsGroupTable = conn.getTable(RSGROUP_TABLE_NAME);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      groupList.addAll(retrieveGroupListFromGroupTable());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    } else {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      LOG.debug("Refreshing in Offline mode.");<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      groupList.addAll(retrieveGroupListFromZookeeper());<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>    // refresh default group, prune<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    NavigableSet&lt;TableName&gt; orphanTables = new TreeSet&lt;&gt;();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    for(String entry: masterServices.getTableDescriptors().getAll().keySet()) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      orphanTables.add(TableName.valueOf(entry));<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    for (RSGroupInfo group: groupList) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      if(!group.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        orphanTables.removeAll(group.getTables());<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>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span>    // This is added to the last of the list so it overwrites the 'default' rsgroup loaded<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    // from region group table or zk<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    groupList.add(new RSGroupInfo(RSGroupInfo.DEFAULT_GROUP, getDefaultServers(),<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        orphanTables));<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>    // populate the data<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    HashMap&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    HashMap&lt;TableName, String&gt; newTableMap = Maps.newHashMap();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    for (RSGroupInfo group : groupList) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      newGroupMap.put(group.getName(), group);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      for(TableName table: group.getTables()) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        newTableMap.put(table, group.getName());<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    resetRSGroupAndTableMaps(newGroupMap, newTableMap);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    updateCacheOfRSGroups(rsGroupMap.keySet());<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>  private synchronized Map&lt;TableName,String&gt; flushConfigTable(Map&lt;String,RSGroupInfo&gt; groupMap)<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Map&lt;TableName,String&gt; newTableMap = Maps.newHashMap();<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    List&lt;Mutation&gt; mutations = Lists.newArrayList();<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // populate deletes<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    for(String groupName : prevRSGroups) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      if(!groupMap.containsKey(groupName)) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        Delete d = new Delete(Bytes.toBytes(groupName));<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        mutations.add(d);<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>    resetRSGroupAndTableMaps(newGroupMap, newTableMap);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    updateCacheOfRSGroups(rsGroupMap.keySet());<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>  private synchronized Map&lt;TableName,String&gt; flushConfigTable(Map&lt;String,RSGroupInfo&gt; groupMap)<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      throws IOException {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    Map&lt;TableName,String&gt; newTableMap = Maps.newHashMap();<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    List&lt;Mutation&gt; mutations = Lists.newArrayList();<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span>    // populate deletes<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    for(String groupName : prevRSGroups) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      if(!groupMap.containsKey(groupName)) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        Delete d = new Delete(Bytes.toBytes(groupName));<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        mutations.add(d);<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>    // populate puts<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    for(RSGroupInfo RSGroupInfo : groupMap.values()) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      RSGroupProtos.RSGroupInfo proto = RSGroupProtobufUtil.toProtoGroupInfo(RSGroupInfo);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      Put p = new Put(Bytes.toBytes(RSGroupInfo.getName()));<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      p.addColumn(META_FAMILY_BYTES, META_QUALIFIER_BYTES, proto.toByteArray());<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      mutations.add(p);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      for(TableName entry: RSGroupInfo.getTables()) {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        newTableMap.put(entry, RSGroupInfo.getName());<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      }<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>    if(mutations.size() &gt; 0) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      multiMutate(mutations);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    return newTableMap;<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>  private synchronized void flushConfig()<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    flushConfig(this.rsGroupMap);<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>  private synchronized void f

<TRUNCATED>

[26/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
index 9644187..b979909 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
@@ -1199,2602 +1199,2599 @@
 <span class="sourceLineNo">1191</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1191"></a>
 <span class="sourceLineNo">1192</span>    try {<a name="line.1192"></a>
 <span class="sourceLineNo">1193</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>      ServerName sn = ServerName.parseVersionedServerName(this.serverName.getVersionedBytes());<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      request.setServer(ProtobufUtil.toServerName(sn));<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>      request.setLoad(sl);<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>      rss.regionServerReport(null, request.build());<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>    } catch (ServiceException se) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>        // This will be caught and handled as a fatal error in run()<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>        throw ioe;<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>      }<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>      if (rssStub == rss) {<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>        rssStub = null;<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      }<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>      // Method blocks until new master is found or we are stopped<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      createRegionServerStatusStub(true);<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>    }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>  }<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span><a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>  /**<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>   *<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>   * @param regionSizeStore The store containing region sizes<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>   */<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>    if (rss == null) {<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>      // the current server could be stopping.<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      return true;<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    }<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>    try {<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>    } catch (ServiceException se) {<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>            + " This will be retried.", ioe);<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>        return true;<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      }<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      if (rssStub == rss) {<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>        rssStub = null;<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>      }<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>      createRegionServerStatusStub(true);<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>            return false;<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>          }<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>        }<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      }<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    }<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    return true;<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>  }<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>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>   *<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>   * @param rss The stub to send to the Master<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>   * @param regionSizeStore The store containing region sizes<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>   */<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>  void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    RegionSpaceUseReportRequest request =<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    // Record the number of size reports sent<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>    if (metricsRegionServer != null) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    }<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>  }<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span><a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>  /**<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>   *<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>   * @param regionSizeStore The size in bytes of regions<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>   * @return The corresponding protocol buffer message.<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>   */<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    }<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>    return request.build();<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>  }<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span><a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>  /**<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>   * protobuf message.<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>   *<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>   * @param regionInfo The RegionInfo<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>   * @return The protocol buffer<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>   */<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    return RegionSpaceUse.newBuilder()<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>        .build();<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>  ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>      throws IOException {<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>    // the wrapper to compute those numbers in one place.<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    // history.<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>    long usedMemory = -1L;<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>    long maxMemory = -1L;<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>    if (usage != null) {<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>      usedMemory = usage.getUsed();<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>      maxMemory = usage.getMax();<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>    }<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span><a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>    for (String coprocessor : coprocessors) {<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>    }<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    for (HRegion region : regions) {<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>      if (region.getCoprocessorHost() != null) {<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>        Iterator&lt;String&gt; iterator = regionCoprocessors.iterator();<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>        while (iterator.hasNext()) {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(iterator.next()).build());<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>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>          .getCoprocessors()) {<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<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>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    if (this.infoServer != null) {<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    } else {<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>      serverLoad.setInfoServerPort(-1);<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>    // for the replicationLoad purpose. Only need to get from one executorService<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    // either source or sink will get the same info<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    ReplicationSourceService rsources = getReplicationSourceService();<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span><a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>    if (rsources != null) {<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>      // always refresh first to get the latest value<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>      ReplicationLoad rLoad = rsources.refreshAndGetReplicationLoad();<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>      if (rLoad != null) {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad.getReplicationLoadSourceList()) {<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>        }<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>      }<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>    }<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span><a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>    return serverLoad.build();<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>  }<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span><a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>  String getOnlineRegionsAsPrintableString() {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    StringBuilder sb = new StringBuilder();<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    }<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    return sb.toString();<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>  }<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>  /**<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>   * Wait on regions close.<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>   */<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    // Wait till all regions are closed before going out.<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    int lastCount = -1;<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    long previousLogTime = 0;<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    boolean interrupted = false;<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    try {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      while (!isOnlineRegionsEmpty()) {<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        int count = getNumberOfOnlineRegions();<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>        // Only print a message if the count of regions has changed.<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>        if (count != lastCount) {<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>          // Log every second at most<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>            previousLogTime = System.currentTimeMillis();<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>            lastCount = count;<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>            // Only print out regions still closing if a small number else will<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>            // swamp the log.<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>            }<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>          }<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>        }<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>        // protect against the case where an open comes in after we start the<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        // iterator of onlineRegions to close all user regions.<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>            closedRegions.add(hri.getEncodedName());<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>            // Don't update zk with this close transition; pass false.<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>            closeRegionIgnoreErrors(hri, abort);<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>        // No regions in RIT, we could stop waiting now.<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>          if (!isOnlineRegionsEmpty()) {<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>                " because some regions failed closing");<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>          }<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>          break;<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>        }<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>        if (sleep(200)) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>          interrupted = true;<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>        }<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>      }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>    } finally {<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      if (interrupted) {<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>        Thread.currentThread().interrupt();<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>  }<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span><a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  private boolean sleep(long millis) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    boolean interrupted = false;<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>    try {<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      Thread.sleep(millis);<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>    } catch (InterruptedException e) {<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      LOG.warn("Interrupted while sleeping");<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      interrupted = true;<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>    }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>    return interrupted;<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>  }<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span><a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>  private void shutdownWAL(final boolean close) {<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>    if (this.walFactory != null) {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      try {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (close) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          walFactory.close();<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        } else {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>          walFactory.shutdown();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      } catch (Throwable e) {<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      }<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    }<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>  /*<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>   *<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>   * @param c Extra configuration.<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>   */<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  throws IOException {<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>    try {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>      boolean updateRootDir = false;<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        String key = e.getName();<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        // The hostname the master sees us as.<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>              this.startcode);<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>            LOG.error(msg);<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>            throw new IOException(msg);<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          }<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>            LOG.error(msg);<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>          }<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>          continue;<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>        }<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span><a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>        String value = e.getValue();<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>            updateRootDir = true;<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><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>        if (LOG.isDebugEnabled()) {<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>        }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>        this.conf.set(key, value);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      }<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>      createMyEphemeralNode();<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>      if (updateRootDir) {<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>        initializeFileSystem();<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>      }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span><a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<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>      // Save it in a file, this will allow to see if we crash<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span><a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      setupWALAndReplication();<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          new MetricsRegionServerWrapperImpl(this), conf);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>      this.metricsTable = new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      pauseMonitor.start();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span><a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        startServices();<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      }<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>      // or make sense of it.<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      startReplicationService();<a name="line.1543"></a>
+<span class="sourceLineNo">1194</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>      request.setLoad(sl);<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>      rss.regionServerReport(null, request.build());<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    } catch (ServiceException se) {<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>        // This will be caught and handled as a fatal error in run()<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>        throw ioe;<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>      }<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>      if (rssStub == rss) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>        rssStub = null;<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>      }<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>      // Method blocks until new master is found or we are stopped<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>      createRegionServerStatusStub(true);<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>    }<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>  }<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span><a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>  /**<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>   *<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>   * @param regionSizeStore The store containing region sizes<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>   */<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>    if (rss == null) {<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      // the current server could be stopping.<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>      return true;<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>    }<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    try {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>    } catch (ServiceException se) {<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>            + " This will be retried.", ioe);<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>        return true;<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>      }<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>      if (rssStub == rss) {<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>        rssStub = null;<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      }<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>      createRegionServerStatusStub(true);<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>            return false;<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>          }<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>        }<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>      }<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>    }<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>    return true;<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>  }<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span><a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>  /**<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>   *<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>   * @param rss The stub to send to the Master<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>   * @param regionSizeStore The store containing region sizes<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>   */<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>  void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>    RegionSpaceUseReportRequest request =<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>    // Record the number of size reports sent<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>    if (metricsRegionServer != null) {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<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><a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>  /**<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>   *<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>   * @param regionSizeStore The size in bytes of regions<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>   * @return The corresponding protocol buffer message.<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>   */<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>    return request.build();<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>  /**<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>   * protobuf message.<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>   *<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>   * @param regionInfo The RegionInfo<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   * @return The protocol buffer<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>   */<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>    return RegionSpaceUse.newBuilder()<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>        .build();<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>  ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      throws IOException {<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>    // the wrapper to compute those numbers in one place.<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    // history.<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>    long usedMemory = -1L;<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    long maxMemory = -1L;<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>    if (usage != null) {<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>      usedMemory = usage.getUsed();<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>      maxMemory = usage.getMax();<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>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>    for (String coprocessor : coprocessors) {<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>    }<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>    for (HRegion region : regions) {<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>      if (region.getCoprocessorHost() != null) {<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>        Iterator&lt;String&gt; iterator = regionCoprocessors.iterator();<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>        while (iterator.hasNext()) {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(iterator.next()).build());<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>        }<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>      }<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>          .getCoprocessors()) {<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>      }<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>    }<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>    if (this.infoServer != null) {<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>    } else {<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>      serverLoad.setInfoServerPort(-1);<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>    // for the replicationLoad purpose. Only need to get from one executorService<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>    // either source or sink will get the same info<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>    ReplicationSourceService rsources = getReplicationSourceService();<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span><a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>    if (rsources != null) {<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>      // always refresh first to get the latest value<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>      ReplicationLoad rLoad = rsources.refreshAndGetReplicationLoad();<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>      if (rLoad != null) {<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad.getReplicationLoadSourceList()) {<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>        }<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>      }<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>    }<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span><a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>    return serverLoad.build();<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>  }<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span><a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>  String getOnlineRegionsAsPrintableString() {<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>    StringBuilder sb = new StringBuilder();<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>    }<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>    return sb.toString();<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>  }<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span><a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>  /**<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>   * Wait on regions close.<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>   */<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>    // Wait till all regions are closed before going out.<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>    int lastCount = -1;<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>    long previousLogTime = 0;<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>    boolean interrupted = false;<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>    try {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>      while (!isOnlineRegionsEmpty()) {<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>        int count = getNumberOfOnlineRegions();<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>        // Only print a message if the count of regions has changed.<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>        if (count != lastCount) {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>          // Log every second at most<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>            previousLogTime = System.currentTimeMillis();<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>            lastCount = count;<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>            // Only print out regions still closing if a small number else will<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>            // swamp the log.<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>            }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>          }<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>        }<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>        // protect against the case where an open comes in after we start the<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>        // iterator of onlineRegions to close all user regions.<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>            closedRegions.add(hri.getEncodedName());<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>            // Don't update zk with this close transition; pass false.<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>            closeRegionIgnoreErrors(hri, abort);<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>        // No regions in RIT, we could stop waiting now.<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>          if (!isOnlineRegionsEmpty()) {<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>                " because some regions failed closing");<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>          }<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>          break;<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>        }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>        if (sleep(200)) {<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>          interrupted = true;<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>        }<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      }<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>    } finally {<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>      if (interrupted) {<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>        Thread.currentThread().interrupt();<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><a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>  private boolean sleep(long millis) {<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>    boolean interrupted = false;<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    try {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>      Thread.sleep(millis);<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>    } catch (InterruptedException e) {<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      LOG.warn("Interrupted while sleeping");<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      interrupted = true;<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>    return interrupted;<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>  }<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span><a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>  private void shutdownWAL(final boolean close) {<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    if (this.walFactory != null) {<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>      try {<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>        if (close) {<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>          walFactory.close();<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        } else {<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>          walFactory.shutdown();<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>        }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>      } catch (Throwable e) {<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>      }<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    }<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>  }<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span><a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>  /*<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>   *<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>   * @param c Extra configuration.<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>   */<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>  throws IOException {<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>    try {<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      boolean updateRootDir = false;<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>        String key = e.getName();<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        // The hostname the master sees us as.<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>              this.startcode);<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>            LOG.error(msg);<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>            throw new IOException(msg);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>          }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>            LOG.error(msg);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>          }<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>          continue;<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>        }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span><a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>        String value = e.getValue();<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>            updateRootDir = true;<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>        if (LOG.isDebugEnabled()) {<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>        }<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>        this.conf.set(key, value);<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      createMyEphemeralNode();<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span><a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>      if (updateRootDir) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        initializeFileSystem();<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>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>      }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span><a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      // Save it in a file, this will allow to see if we crash<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span><a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      setupWALAndReplication();<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>          new MetricsRegionServerWrapperImpl(this), conf);<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      this.metricsTable = new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      pauseMonitor.start();<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span><a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>        startServices();<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>      }<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      // or make sense of it.<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      startReplicationService();<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span><a name="line.1543"></a>
 <span class="sourceLineNo">1544</span><a name="line.1544"></a>
-<span class="sourceLineNo">1545</span><a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      // Set up ZK<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.isa +<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          ", sessionid=0x" +<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>      // Wake up anyone waiting for this server to online<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>      synchronized (online) {<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>        online.set(true);<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>        online.notifyAll();<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>      }<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>    } catch (Throwable e) {<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>      stop("Failed initialization");<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"),<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          "Region server startup failed");<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    } finally {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      sleeper.skipSleepCycle();<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>  protected void initializeMemStoreChunkCreator() {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    if (MemStoreLAB.isEnabled(conf)) {<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      // MSLAB is enabled. So initialize MemStoreChunkPool<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      // By this time, the MemstoreFlusher is already initialized. We can get the global limits from<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      // it.<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      Pair&lt;Long, MemoryType&gt; pair = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      long globalMemStoreSize = pair.getFirst();<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      boolean offheap = this.regionServerAccounting.isOffheap();<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>      // When off heap memstore in use, take full area for chunk pool.<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      float poolSizePercentage = offheap? 1.0F:<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>          conf.getFloat(MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY, MemStoreLAB.POOL_MAX_SIZE_DEFAULT);<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>      float initialCountPercentage = conf.getFloat(MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY,<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          MemStoreLAB.POOL_INITIAL_SIZE_DEFAULT);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>      int chunkSize = conf.getInt(MemStoreLAB.CHUNK_SIZE_KEY, MemStoreLAB.CHUNK_SIZE_DEFAULT);<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // init the chunkCreator<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      ChunkCreator chunkCreator =<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>          ChunkCreator.initialize(chunkSize, offheap, globalMemStoreSize, poolSizePercentage,<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      initialCountPercentage, this.hMemManager);<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    }<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>  }<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span><a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>  private void startHeapMemoryManager() {<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>    this.hMemManager = HeapMemoryManager.create(this.conf, this.cacheFlusher, this,<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>        this.regionServerAccounting);<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>    if (this.hMemManager != null) {<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      this.hMemManager.start(getChoreService());<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>    }<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span><a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>  private void createMyEphemeralNode() throws KeeperException, IOException {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>  }<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span><a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>  }<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span><a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  @Override<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    return regionServerAccounting;<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>  }<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span><a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  /*<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>   * @param r Region to get RegionLoad for.<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * @return RegionLoad instance.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   *<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>   * @throws IOException<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>   */<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>    int stores = 0;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    int storefiles = 0;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    int storeUncompressedSizeMB = 0;<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    int storefileSizeMB = 0;<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>    int memstoreSizeMB = (int) (r.getMemStoreDataSize() / 1024 / 1024);<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>    long storefileIndexSizeKB = 0;<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>    int rootLevelIndexSizeKB = 0;<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>    int totalStaticIndexSizeKB = 0;<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>    int totalStaticBloomSizeKB = 0;<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    long totalCompactingKVs = 0;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    long currentCompactedKVs = 0;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    stores += storeList.size();<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    for (HStore store : storeList) {<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      storefiles += store.getStorefilesCount();<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>      //TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      storefileIndexSizeKB += store.getStorefilesRootLevelIndexSize() / 1024;<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      if (progress != null) {<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      }<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      rootLevelIndexSizeKB += (int) (store.getStorefilesRootLevelIndexSize() / 1024);<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<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>    float dataLocality =<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>        r.getHDFSBlocksDistribution().getBlockLocalityIndex(serverName.getHostname());<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    if (regionLoadBldr == null) {<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    }<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    if (regionSpecifier == null) {<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      .setStores(stores)<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>      .setStorefiles(storefiles)<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      .setMemStoreSizeMB(memstoreSizeMB)<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      .setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB)<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      .setDataLocality(dataLocality)<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span><a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    return regionLoadBldr.build();<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>   * @param encodedRegionName<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>   * @return An instance of RegionLoad.<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>   */<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="line.1688"></a>
-<span class="sou

<TRUNCATED>

[38/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html
index 9e87cef..92f2401 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html
@@ -18,8 +18,8 @@
     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};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":9,"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};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
 var tableTab = "tableTab";
@@ -239,7 +239,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 </a>
 <h3>Method Summary</h3>
 <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
 <th class="colLast" scope="col">Method and Description</th>
@@ -263,7 +263,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
             int&nbsp;maxAlloc)</code>&nbsp;</td>
 </tr>
 <tr id="i3" class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#copyToChunkCell-org.apache.hadoop.hbase.Cell-java.nio.ByteBuffer-int-int-">copyToChunkCell</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
                int&nbsp;offset,
@@ -539,7 +539,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>copyCellInto</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.136">copyCellInto</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.137">copyCellInto</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                           int&nbsp;maxAlloc)</pre>
 </li>
 </ul>
@@ -549,10 +549,10 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>copyToChunkCell</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.172">copyToChunkCell</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
-                             <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
-                             int&nbsp;offset,
-                             int&nbsp;len)</pre>
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.174">copyToChunkCell</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
+                                    int&nbsp;offset,
+                                    int&nbsp;len)</pre>
 <div class="block">Clone the passed cell by copying its data into the passed buf and create a cell with a chunkid
  out of it</div>
 </li>
@@ -563,7 +563,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.200">close</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.202">close</a>()</pre>
 <div class="block">Close this instance since it won't be used any more, try to put the chunks
  back to pool</div>
 <dl>
@@ -578,7 +578,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>incScannerCount</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.214">incScannerCount</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.216">incScannerCount</a>()</pre>
 <div class="block">Called when opening a scanner on the data of this MemStoreLAB</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -592,7 +592,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>decScannerCount</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.222">decScannerCount</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.224">decScannerCount</a>()</pre>
 <div class="block">Called when closing a scanner on the data of this MemStoreLAB</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -606,7 +606,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>recycleChunks</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.229">recycleChunks</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.231">recycleChunks</a>()</pre>
 </li>
 </ul>
 <a name="tryRetireChunk-org.apache.hadoop.hbase.regionserver.Chunk-">
@@ -615,7 +615,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>tryRetireChunk</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.242">tryRetireChunk</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;c)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.244">tryRetireChunk</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;c)</pre>
 <div class="block">Try to retire the current chunk if it is still
  <code>c</code>. Postcondition is that curChunk.get()
  != c</div>
@@ -631,7 +631,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>getOrMakeChunk</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.256">getOrMakeChunk</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.258">getOrMakeChunk</a>()</pre>
 <div class="block">Get the current chunk, or, if there is no current chunk,
  allocate a new one from the JVM.</div>
 </li>
@@ -642,7 +642,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>getNewExternalChunk</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.293">getNewExternalChunk</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver">ChunkCreator.ChunkType</a>&nbsp;chunkType)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.294">getNewExternalChunk</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver">ChunkCreator.ChunkType</a>&nbsp;chunkType)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreLAB.html#getNewExternalChunk-org.apache.hadoop.hbase.regionserver.ChunkCreator.ChunkType-">getNewExternalChunk</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreLAB.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreLAB</a></code></dd>
@@ -655,7 +655,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>getNewExternalChunk</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.313">getNewExternalChunk</a>(int&nbsp;size)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.314">getNewExternalChunk</a>(int&nbsp;size)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreLAB.html#getNewExternalChunk-int-">getNewExternalChunk</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreLAB.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreLAB</a></code></dd>
@@ -668,7 +668,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>isOnHeap</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.325">isOnHeap</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.326">isOnHeap</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreLAB.html#isOnHeap--">isOnHeap</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreLAB.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreLAB</a></code></dd>
@@ -681,7 +681,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>isOffHeap</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.330">isOffHeap</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.331">isOffHeap</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreLAB.html#isOffHeap--">isOffHeap</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreLAB.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreLAB</a></code></dd>
@@ -694,7 +694,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentChunk</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.335">getCurrentChunk</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.336">getCurrentChunk</a>()</pre>
 </li>
 </ul>
 <a name="getPooledChunks--">
@@ -703,7 +703,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>getPooledChunks</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.340">getPooledChunks</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">Chunk</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.341">getPooledChunks</a>()</pre>
 </li>
 </ul>
 <a name="getNumOfChunksReturnedToPool--">
@@ -712,7 +712,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getNumOfChunksReturnedToPool</h4>
-<pre><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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.351">getNumOfChunksReturnedToPool</a>()</pre>
+<pre><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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#line.352">getNumOfChunksReturnedToPool</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/regionserver/NoTagByteBufferChunkKeyValue.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/NoTagByteBufferChunkKeyValue.html b/devapidocs/org/apache/hadoop/hbase/regionserver/NoTagByteBufferChunkKeyValue.html
index 610eb71..5a03c05 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/NoTagByteBufferChunkKeyValue.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/NoTagByteBufferChunkKeyValue.html
@@ -124,7 +124,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <hr>
 <br>
@@ -253,6 +253,13 @@ extends <a href="../../../../../org/apache/hadoop/hbase/NoTagsByteBufferKeyValue
 <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.htm
 l?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
 </ul>
 <ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.ExtendedCell">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a></code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">
 <!--   -->
 </a>
@@ -323,7 +330,8 @@ extends <a href="../../../../../org/apache/hadoop/hbase/NoTagsByteBufferKeyValue
  chunks as in case of MemstoreLAB</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>the chunk id if the cell is backed by fixed sized Chunks, else return -1</dd>
+<dd>the chunk id if the cell is backed by fixed sized Chunks, else return
+ <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#CELL_NOT_BASED_ON_CHUNK"><code>ExtendedCell.CELL_NOT_BASED_ON_CHUNK</code></a>; i.e. -1.</dd>
 </dl>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 56aff73..a57c9f0 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -703,20 +703,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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
----------------------------------------------------------------------
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 23060c2..2731576 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,9 +130,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.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>
 <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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
----------------------------------------------------------------------
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 f6fc79b..a4ab1b7 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -238,8 +238,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.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/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/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html b/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
index b54ff8c..55bd958 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.213">HBaseReplicationEndpoint.PeerRegionServerListener</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.224">HBaseReplicationEndpoint.PeerRegionServerListener</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKListener</a></pre>
 <div class="block">Tracks changes to the list of region servers in a peer's cluster.</div>
 </li>
@@ -227,7 +227,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationEndpoint</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html#line.215">replicationEndpoint</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html#line.226">replicationEndpoint</a></pre>
 </li>
 </ul>
 <a name="regionServerListNode">
@@ -236,7 +236,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>regionServerListNode</h4>
-<pre>private 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/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html#line.216">regionServerListNode</a></pre>
+<pre>private 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/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html#line.227">regionServerListNode</a></pre>
 </li>
 </ul>
 </li>
@@ -253,7 +253,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>PeerRegionServerListener</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html#line.218">PeerRegionServerListener</a>(<a href="../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a>&nbsp;replicationPeer)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html#line.229">PeerRegionServerListener</a>(<a href="../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a>&nbsp;replicationPeer)</pre>
 </li>
 </ul>
 </li>
@@ -270,7 +270,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>nodeChildrenChanged</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html#line.225">nodeChildrenChanged</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;path)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html#line.236">nodeChildrenChanged</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;path)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKListener.html#nodeChildrenChanged-java.lang.String-">ZKListener</a></code></span></div>
 <div class="block">Called when an existing node has a child node added or removed.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html b/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
index 8855154..ec46fe1 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
@@ -128,7 +128,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.48">HBaseReplicationEndpoint</a>
+public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.46">HBaseReplicationEndpoint</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/replication/BaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">BaseReplicationEndpoint</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></pre>
 <div class="block">A <a href="../../../../../org/apache/hadoop/hbase/replication/BaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication"><code>BaseReplicationEndpoint</code></a> for replication endpoints whose
@@ -202,6 +202,10 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#zkw">zkw</a></span></code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <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></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#zkwLock">zkwLock</a></span></code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.replication.BaseReplicationEndpoint">
@@ -377,7 +381,16 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <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/replication/HBaseReplicationEndpoint.html#line.51">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.49">LOG</a></pre>
+</li>
+</ul>
+<a name="zkwLock">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>zkwLock</h4>
+<pre>private&nbsp;<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> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.51">zkwLock</a></pre>
 </li>
 </ul>
 <a name="zkw">
@@ -386,7 +399,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>zkw</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.53">zkw</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.52">zkw</a></pre>
 </li>
 </ul>
 <a name="regionServers">
@@ -395,7 +408,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServers</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;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.55">regionServers</a></pre>
+<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;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.54">regionServers</a></pre>
 </li>
 </ul>
 <a name="lastRegionServerUpdate">
@@ -404,7 +417,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockListLast">
 <li class="blockList">
 <h4>lastRegionServerUpdate</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.56">lastRegionServerUpdate</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.55">lastRegionServerUpdate</a></pre>
 </li>
 </ul>
 </li>
@@ -421,7 +434,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HBaseReplicationEndpoint</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.48">HBaseReplicationEndpoint</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.46">HBaseReplicationEndpoint</a>()</pre>
 </li>
 </ul>
 </li>
@@ -438,7 +451,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>disconnect</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.58">disconnect</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.57">disconnect</a>()</pre>
 </li>
 </ul>
 <a name="reconnect-org.apache.zookeeper.KeeperException-">
@@ -447,7 +460,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>reconnect</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.68">reconnect</a>(org.apache.zookeeper.KeeperException&nbsp;ke)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.69">reconnect</a>(org.apache.zookeeper.KeeperException&nbsp;ke)</pre>
 <div class="block">A private method used to re-establish a zookeeper session with a peer cluster.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -461,7 +474,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.82">start</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.83">start</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html#start--">ReplicationEndpoint</a></code></span></div>
 <div class="block">Initiates service startup and returns immediately. A stopped service may not be restarted.
  Equivalent of startAsync call in Guava Service.</div>
@@ -477,7 +490,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.87">stop</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.88">stop</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html#stop--">ReplicationEndpoint</a></code></span></div>
 <div class="block">If the service is starting or running, this initiates service shutdown and returns immediately.
  If the service has already been stopped, this method returns immediately without taking action.
@@ -494,7 +507,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>doStart</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.92">doStart</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.93">doStart</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>doStart</code>&nbsp;in class&nbsp;<code>org.apache.hbase.thirdparty.com.google.common.util.concurrent.AbstractService</code></dd>
@@ -507,7 +520,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>doStop</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.102">doStop</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.103">doStop</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>doStop</code>&nbsp;in class&nbsp;<code>org.apache.hbase.thirdparty.com.google.common.util.concurrent.AbstractService</code></dd>
@@ -520,7 +533,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>getPeerUUID</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.112">getPeerUUID</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.113">getPeerUUID</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html#getPeerUUID--">ReplicationEndpoint</a></code></span></div>
 <div class="block">Returns a UUID of the provided peer id. Every HBase cluster instance has a persisted
  associated UUID. If the replication is not performed to an actual HBase cluster (but
@@ -539,7 +552,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>getZkw</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.126">getZkw</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.129">getZkw</a>()</pre>
 <div class="block">Get the ZK connection to this peer</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -553,7 +566,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>reloadZkWatcher</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.134">reloadZkWatcher</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.139">reloadZkWatcher</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">Closes the current ZKW (if not null) and creates a new one</div>
 <dl>
@@ -568,7 +581,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.142">abort</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;why,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.151">abort</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;why,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-java.lang.Throwable-">Abortable</a></code></span></div>
 <div class="block">Abort the server or client.</div>
@@ -587,7 +600,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>isAborted</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.148">isAborted</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.157">isAborted</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">Abortable</a></code></span></div>
 <div class="block">Check if the server or client was aborted.</div>
 <dl>
@@ -604,7 +617,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>fetchSlavesAddresses</h4>
-<pre>protected 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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.158">fetchSlavesAddresses</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw)
+<pre>protected 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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.167">fetchSlavesAddresses</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw)
                                                 throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">Get the list of all the region servers from the specified peer</div>
 <dl>
@@ -623,7 +636,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServers</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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.180">getRegionServers</a>()</pre>
+<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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.185">getRegionServers</a>()</pre>
 <div class="block">Get a list of all the addresses of all the region servers
  for this peer cluster</div>
 <dl>
@@ -638,7 +651,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>setRegionServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.196">setRegionServers</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;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;regionServers)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.207">setRegionServers</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;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;regionServers)</pre>
 <div class="block">Set the list of region servers for that peer</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -652,7 +665,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getLastRegionServerUpdate</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.206">getLastRegionServerUpdate</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.217">getLastRegionServerUpdate</a>()</pre>
 <div class="block">Get the timestamp at which the last change occurred to the list of region servers to replicate
  to.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
index 6077553..b1d21c5 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.554">ReplicationSource.LogsComparator</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.555">ReplicationSource.LogsComparator</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>
 implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;org.apache.hadoop.fs.Path&gt;</pre>
 <div class="block">Comparator used to compare logs together based on their start time</div>
@@ -203,7 +203,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>LogsComparator</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.554">LogsComparator</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.555">LogsComparator</a>()</pre>
 </li>
 </ul>
 </li>
@@ -220,7 +220,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparat
 <ul class="blockList">
 <li class="blockList">
 <h4>compare</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.557">compare</a>(org.apache.hadoop.fs.Path&nbsp;o1,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.558">compare</a>(org.apache.hadoop.fs.Path&nbsp;o1,
                    org.apache.hadoop.fs.Path&nbsp;o2)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -234,7 +234,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getTS</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.567">getTS</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.568">getTS</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
 <div class="block">Split a path to get the start time
  For example: 10.20.20.171%3A60020.1277499063250</div>
 <dl>


[22/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
index 9644187..b979909 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
@@ -1199,2602 +1199,2599 @@
 <span class="sourceLineNo">1191</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1191"></a>
 <span class="sourceLineNo">1192</span>    try {<a name="line.1192"></a>
 <span class="sourceLineNo">1193</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>      ServerName sn = ServerName.parseVersionedServerName(this.serverName.getVersionedBytes());<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      request.setServer(ProtobufUtil.toServerName(sn));<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>      request.setLoad(sl);<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>      rss.regionServerReport(null, request.build());<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>    } catch (ServiceException se) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>        // This will be caught and handled as a fatal error in run()<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>        throw ioe;<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>      }<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>      if (rssStub == rss) {<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>        rssStub = null;<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      }<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>      // Method blocks until new master is found or we are stopped<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      createRegionServerStatusStub(true);<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>    }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>  }<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span><a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>  /**<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>   *<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>   * @param regionSizeStore The store containing region sizes<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>   */<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>    if (rss == null) {<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>      // the current server could be stopping.<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      return true;<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    }<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>    try {<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>    } catch (ServiceException se) {<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>            + " This will be retried.", ioe);<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>        return true;<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      }<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      if (rssStub == rss) {<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>        rssStub = null;<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>      }<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>      createRegionServerStatusStub(true);<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>            return false;<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>          }<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>        }<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      }<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    }<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    return true;<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>  }<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>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>   *<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>   * @param rss The stub to send to the Master<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>   * @param regionSizeStore The store containing region sizes<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>   */<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>  void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    RegionSpaceUseReportRequest request =<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    // Record the number of size reports sent<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>    if (metricsRegionServer != null) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    }<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>  }<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span><a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>  /**<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>   *<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>   * @param regionSizeStore The size in bytes of regions<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>   * @return The corresponding protocol buffer message.<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>   */<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    }<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>    return request.build();<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>  }<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span><a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>  /**<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>   * protobuf message.<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>   *<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>   * @param regionInfo The RegionInfo<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>   * @return The protocol buffer<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>   */<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    return RegionSpaceUse.newBuilder()<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>        .build();<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>  ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>      throws IOException {<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>    // the wrapper to compute those numbers in one place.<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    // history.<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>    long usedMemory = -1L;<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>    long maxMemory = -1L;<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>    if (usage != null) {<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>      usedMemory = usage.getUsed();<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>      maxMemory = usage.getMax();<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>    }<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span><a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>    for (String coprocessor : coprocessors) {<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>    }<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    for (HRegion region : regions) {<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>      if (region.getCoprocessorHost() != null) {<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>        Iterator&lt;String&gt; iterator = regionCoprocessors.iterator();<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>        while (iterator.hasNext()) {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(iterator.next()).build());<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>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>          .getCoprocessors()) {<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<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>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    if (this.infoServer != null) {<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    } else {<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>      serverLoad.setInfoServerPort(-1);<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>    // for the replicationLoad purpose. Only need to get from one executorService<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    // either source or sink will get the same info<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    ReplicationSourceService rsources = getReplicationSourceService();<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span><a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>    if (rsources != null) {<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>      // always refresh first to get the latest value<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>      ReplicationLoad rLoad = rsources.refreshAndGetReplicationLoad();<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>      if (rLoad != null) {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad.getReplicationLoadSourceList()) {<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>        }<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>      }<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>    }<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span><a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>    return serverLoad.build();<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>  }<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span><a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>  String getOnlineRegionsAsPrintableString() {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    StringBuilder sb = new StringBuilder();<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    }<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    return sb.toString();<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>  }<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>  /**<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>   * Wait on regions close.<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>   */<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    // Wait till all regions are closed before going out.<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    int lastCount = -1;<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    long previousLogTime = 0;<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    boolean interrupted = false;<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    try {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      while (!isOnlineRegionsEmpty()) {<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        int count = getNumberOfOnlineRegions();<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>        // Only print a message if the count of regions has changed.<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>        if (count != lastCount) {<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>          // Log every second at most<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>            previousLogTime = System.currentTimeMillis();<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>            lastCount = count;<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>            // Only print out regions still closing if a small number else will<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>            // swamp the log.<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>            }<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>          }<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>        }<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>        // protect against the case where an open comes in after we start the<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        // iterator of onlineRegions to close all user regions.<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>            closedRegions.add(hri.getEncodedName());<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>            // Don't update zk with this close transition; pass false.<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>            closeRegionIgnoreErrors(hri, abort);<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>        // No regions in RIT, we could stop waiting now.<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>          if (!isOnlineRegionsEmpty()) {<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>                " because some regions failed closing");<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>          }<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>          break;<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>        }<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>        if (sleep(200)) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>          interrupted = true;<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>        }<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>      }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>    } finally {<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      if (interrupted) {<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>        Thread.currentThread().interrupt();<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>  }<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span><a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  private boolean sleep(long millis) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    boolean interrupted = false;<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>    try {<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      Thread.sleep(millis);<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>    } catch (InterruptedException e) {<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      LOG.warn("Interrupted while sleeping");<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      interrupted = true;<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>    }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>    return interrupted;<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>  }<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span><a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>  private void shutdownWAL(final boolean close) {<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>    if (this.walFactory != null) {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      try {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (close) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          walFactory.close();<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        } else {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>          walFactory.shutdown();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      } catch (Throwable e) {<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      }<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    }<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>  /*<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>   *<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>   * @param c Extra configuration.<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>   */<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  throws IOException {<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>    try {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>      boolean updateRootDir = false;<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        String key = e.getName();<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        // The hostname the master sees us as.<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>              this.startcode);<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>            LOG.error(msg);<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>            throw new IOException(msg);<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          }<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>            LOG.error(msg);<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>          }<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>          continue;<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>        }<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span><a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>        String value = e.getValue();<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>            updateRootDir = true;<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><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>        if (LOG.isDebugEnabled()) {<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>        }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>        this.conf.set(key, value);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      }<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>      createMyEphemeralNode();<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>      if (updateRootDir) {<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>        initializeFileSystem();<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>      }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span><a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<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>      // Save it in a file, this will allow to see if we crash<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span><a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      setupWALAndReplication();<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          new MetricsRegionServerWrapperImpl(this), conf);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>      this.metricsTable = new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      pauseMonitor.start();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span><a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        startServices();<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      }<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>      // or make sense of it.<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      startReplicationService();<a name="line.1543"></a>
+<span class="sourceLineNo">1194</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>      request.setLoad(sl);<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>      rss.regionServerReport(null, request.build());<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    } catch (ServiceException se) {<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>        // This will be caught and handled as a fatal error in run()<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>        throw ioe;<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>      }<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>      if (rssStub == rss) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>        rssStub = null;<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>      }<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>      // Method blocks until new master is found or we are stopped<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>      createRegionServerStatusStub(true);<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>    }<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>  }<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span><a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>  /**<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>   *<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>   * @param regionSizeStore The store containing region sizes<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>   */<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>    if (rss == null) {<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      // the current server could be stopping.<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>      return true;<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>    }<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    try {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>    } catch (ServiceException se) {<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>            + " This will be retried.", ioe);<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>        return true;<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>      }<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>      if (rssStub == rss) {<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>        rssStub = null;<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      }<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>      createRegionServerStatusStub(true);<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>            return false;<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>          }<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>        }<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>      }<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>    }<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>    return true;<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>  }<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span><a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>  /**<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>   *<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>   * @param rss The stub to send to the Master<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>   * @param regionSizeStore The store containing region sizes<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>   */<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>  void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>    RegionSpaceUseReportRequest request =<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>    // Record the number of size reports sent<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>    if (metricsRegionServer != null) {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<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><a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>  /**<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>   *<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>   * @param regionSizeStore The size in bytes of regions<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>   * @return The corresponding protocol buffer message.<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>   */<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>    return request.build();<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>  /**<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>   * protobuf message.<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>   *<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>   * @param regionInfo The RegionInfo<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   * @return The protocol buffer<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>   */<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>    return RegionSpaceUse.newBuilder()<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>        .build();<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>  ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      throws IOException {<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>    // the wrapper to compute those numbers in one place.<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    // history.<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>    long usedMemory = -1L;<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    long maxMemory = -1L;<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>    if (usage != null) {<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>      usedMemory = usage.getUsed();<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>      maxMemory = usage.getMax();<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>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>    for (String coprocessor : coprocessors) {<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>    }<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>    for (HRegion region : regions) {<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>      if (region.getCoprocessorHost() != null) {<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>        Iterator&lt;String&gt; iterator = regionCoprocessors.iterator();<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>        while (iterator.hasNext()) {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(iterator.next()).build());<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>        }<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>      }<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>          .getCoprocessors()) {<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>      }<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>    }<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>    if (this.infoServer != null) {<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>    } else {<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>      serverLoad.setInfoServerPort(-1);<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>    // for the replicationLoad purpose. Only need to get from one executorService<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>    // either source or sink will get the same info<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>    ReplicationSourceService rsources = getReplicationSourceService();<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span><a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>    if (rsources != null) {<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>      // always refresh first to get the latest value<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>      ReplicationLoad rLoad = rsources.refreshAndGetReplicationLoad();<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>      if (rLoad != null) {<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad.getReplicationLoadSourceList()) {<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>        }<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>      }<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>    }<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span><a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>    return serverLoad.build();<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>  }<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span><a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>  String getOnlineRegionsAsPrintableString() {<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>    StringBuilder sb = new StringBuilder();<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>    }<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>    return sb.toString();<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>  }<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span><a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>  /**<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>   * Wait on regions close.<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>   */<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>    // Wait till all regions are closed before going out.<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>    int lastCount = -1;<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>    long previousLogTime = 0;<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>    boolean interrupted = false;<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>    try {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>      while (!isOnlineRegionsEmpty()) {<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>        int count = getNumberOfOnlineRegions();<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>        // Only print a message if the count of regions has changed.<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>        if (count != lastCount) {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>          // Log every second at most<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>            previousLogTime = System.currentTimeMillis();<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>            lastCount = count;<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>            // Only print out regions still closing if a small number else will<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>            // swamp the log.<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>            }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>          }<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>        }<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>        // protect against the case where an open comes in after we start the<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>        // iterator of onlineRegions to close all user regions.<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>            closedRegions.add(hri.getEncodedName());<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>            // Don't update zk with this close transition; pass false.<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>            closeRegionIgnoreErrors(hri, abort);<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>        // No regions in RIT, we could stop waiting now.<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>          if (!isOnlineRegionsEmpty()) {<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>                " because some regions failed closing");<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>          }<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>          break;<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>        }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>        if (sleep(200)) {<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>          interrupted = true;<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>        }<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      }<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>    } finally {<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>      if (interrupted) {<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>        Thread.currentThread().interrupt();<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><a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>  private boolean sleep(long millis) {<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>    boolean interrupted = false;<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    try {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>      Thread.sleep(millis);<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>    } catch (InterruptedException e) {<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      LOG.warn("Interrupted while sleeping");<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      interrupted = true;<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>    return interrupted;<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>  }<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span><a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>  private void shutdownWAL(final boolean close) {<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    if (this.walFactory != null) {<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>      try {<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>        if (close) {<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>          walFactory.close();<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        } else {<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>          walFactory.shutdown();<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>        }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>      } catch (Throwable e) {<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>      }<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    }<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>  }<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span><a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>  /*<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>   *<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>   * @param c Extra configuration.<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>   */<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>  throws IOException {<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>    try {<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      boolean updateRootDir = false;<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>        String key = e.getName();<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        // The hostname the master sees us as.<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>              this.startcode);<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>            LOG.error(msg);<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>            throw new IOException(msg);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>          }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>            LOG.error(msg);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>          }<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>          continue;<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>        }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span><a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>        String value = e.getValue();<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>            updateRootDir = true;<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>        if (LOG.isDebugEnabled()) {<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>        }<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>        this.conf.set(key, value);<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      createMyEphemeralNode();<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span><a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>      if (updateRootDir) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        initializeFileSystem();<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>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>      }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span><a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      // Save it in a file, this will allow to see if we crash<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span><a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      setupWALAndReplication();<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>          new MetricsRegionServerWrapperImpl(this), conf);<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      this.metricsTable = new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      pauseMonitor.start();<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span><a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>        startServices();<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>      }<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      // or make sense of it.<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      startReplicationService();<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span><a name="line.1543"></a>
 <span class="sourceLineNo">1544</span><a name="line.1544"></a>
-<span class="sourceLineNo">1545</span><a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      // Set up ZK<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.isa +<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          ", sessionid=0x" +<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>      // Wake up anyone waiting for this server to online<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>      synchronized (online) {<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>        online.set(true);<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>        online.notifyAll();<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>      }<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>    } catch (Throwable e) {<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>      stop("Failed initialization");<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"),<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          "Region server startup failed");<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    } finally {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      sleeper.skipSleepCycle();<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>  protected void initializeMemStoreChunkCreator() {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    if (MemStoreLAB.isEnabled(conf)) {<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      // MSLAB is enabled. So initialize MemStoreChunkPool<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      // By this time, the MemstoreFlusher is already initialized. We can get the global limits from<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      // it.<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      Pair&lt;Long, MemoryType&gt; pair = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      long globalMemStoreSize = pair.getFirst();<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      boolean offheap = this.regionServerAccounting.isOffheap();<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>      // When off heap memstore in use, take full area for chunk pool.<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      float poolSizePercentage = offheap? 1.0F:<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>          conf.getFloat(MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY, MemStoreLAB.POOL_MAX_SIZE_DEFAULT);<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>      float initialCountPercentage = conf.getFloat(MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY,<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          MemStoreLAB.POOL_INITIAL_SIZE_DEFAULT);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>      int chunkSize = conf.getInt(MemStoreLAB.CHUNK_SIZE_KEY, MemStoreLAB.CHUNK_SIZE_DEFAULT);<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // init the chunkCreator<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      ChunkCreator chunkCreator =<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>          ChunkCreator.initialize(chunkSize, offheap, globalMemStoreSize, poolSizePercentage,<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      initialCountPercentage, this.hMemManager);<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    }<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>  }<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span><a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>  private void startHeapMemoryManager() {<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>    this.hMemManager = HeapMemoryManager.create(this.conf, this.cacheFlusher, this,<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>        this.regionServerAccounting);<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>    if (this.hMemManager != null) {<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      this.hMemManager.start(getChoreService());<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>    }<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span><a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>  private void createMyEphemeralNode() throws KeeperException, IOException {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>  }<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span><a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>  }<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span><a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  @Override<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    return regionServerAccounting;<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>  }<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span><a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  /*<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>   * @param r Region to get RegionLoad for.<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * @return RegionLoad instance.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   *<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>   * @throws IOException<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>   */<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>    int stores = 0;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    int storefiles = 0;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    int storeUncompressedSizeMB = 0;<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    int storefileSizeMB = 0;<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>    int memstoreSizeMB = (int) (r.getMemStoreDataSize() / 1024 / 1024);<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>    long storefileIndexSizeKB = 0;<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>    int rootLevelIndexSizeKB = 0;<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>    int totalStaticIndexSizeKB = 0;<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>    int totalStaticBloomSizeKB = 0;<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    long totalCompactingKVs = 0;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    long currentCompactedKVs = 0;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    stores += storeList.size();<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    for (HStore store : storeList) {<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      storefiles += store.getStorefilesCount();<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>      //TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      storefileIndexSizeKB += store.getStorefilesRootLevelIndexSize() / 1024;<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      if (progress != null) {<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      }<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      rootLevelIndexSizeKB += (int) (store.getStorefilesRootLevelIndexSize() / 1024);<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<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>    float dataLocality =<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>        r.getHDFSBlocksDistribution().getBlockLocalityIndex(serverName.getHostname());<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    if (regionLoadBldr == null) {<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    }<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    if (regionSpecifier == null) {<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      .setStores(stores)<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>      .setStorefiles(storefiles)<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      .setMemStoreSizeMB(memstoreSizeMB)<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      .setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB)<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      .setDataLocality(dataLocality)<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span><a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    return regionLoadBldr.build();<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>   * @param encodedRegionName<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>   * @return An instance of RegionLoad.<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>   */<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>    return r != null ? createRegionLoad(r, null, null) : null;<a nam

<TRUNCATED>

[03/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AppendTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AppendTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AppendTest.html
index fc0a9f1..458b775 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AppendTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AppendTest.html
@@ -133,7 +133,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2035">PerformanceEvaluation.AppendTest</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2038">PerformanceEvaluation.AppendTest</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.CASTableTest</a></pre>
 </li>
 </ul>
@@ -202,8 +202,10 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AppendTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AppendTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>
+<div class="block">Test for individual row.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -221,13 +223,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.Test">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -261,7 +256,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AppendTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AppendTest.html#line.2036">AppendTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AppendTest.html#line.2039">AppendTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
            <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
            <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -280,11 +275,19 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testRow</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AppendTest.html#line.2041">testRow</a>(int&nbsp;i)
-      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AppendTest.html#line.2044">testRow</a>(int&nbsp;i)
+         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">PerformanceEvaluation.TestBase</a></code></span></div>
+<div class="block">Test for individual row.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">testRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>i</code> - Row index.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the row was sent to server and need to record metrics.
+         False if not, multiGet and multiPut e.g., the rows are sent
+         to server only if enough gets/puts are gathered.</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>
 </dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html
index a6d7d96..02a13a6 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html
@@ -128,7 +128,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1419">PerformanceEvaluation.AsyncRandomReadTest</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1442">PerformanceEvaluation.AsyncRandomReadTest</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncTableTest</a></pre>
 </li>
 </ul>
@@ -228,8 +228,10 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#runtime-java.lang.Throwable-">runtime</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</code>&nbsp;</td>
 </tr>
 <tr id="i3" class="rowColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>
+<div class="block">Test for individual row.</div>
+</td>
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
@@ -244,13 +246,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.AsyncTest">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncTest</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -284,7 +279,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockList">
 <li class="blockList">
 <h4>consistency</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.client.Consistency <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1420">consistency</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.client.Consistency <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1443">consistency</a></pre>
 </li>
 </ul>
 <a name="gets">
@@ -293,7 +288,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockList">
 <li class="blockList">
 <h4>gets</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;org.apache.hadoop.hbase.client.Get&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1421">gets</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;org.apache.hadoop.hbase.client.Get&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1444">gets</a></pre>
 </li>
 </ul>
 <a name="rd">
@@ -302,7 +297,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockListLast">
 <li class="blockList">
 <h4>rd</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1422">rd</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1445">rd</a></pre>
 </li>
 </ul>
 </li>
@@ -319,7 +314,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AsyncRandomReadTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1424">AsyncRandomReadTest</a>(org.apache.hadoop.hbase.client.AsyncConnection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1447">AsyncRandomReadTest</a>(org.apache.hadoop.hbase.client.AsyncConnection&nbsp;con,
                     <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                     <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -338,12 +333,20 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockList">
 <li class="blockList">
 <h4>testRow</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1434">testRow</a>(int&nbsp;i)
-      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
-             <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>
+<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1457">testRow</a>(int&nbsp;i)
+         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
+                <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"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">PerformanceEvaluation.TestBase</a></code></span></div>
+<div class="block">Test for individual row.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">testRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>i</code> - Row index.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the row was sent to server and need to record metrics.
+         False if not, multiGet and multiPut e.g., the rows are sent
+         to server only if enough gets/puts are gathered.</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>
 <dd><code><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></code></dd>
@@ -356,7 +359,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockList">
 <li class="blockList">
 <h4>runtime</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">RuntimeException</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1472">runtime</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">RuntimeException</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1498">runtime</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</pre>
 </li>
 </ul>
 <a name="propagate-java.util.concurrent.Callable-">
@@ -365,7 +368,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockList">
 <li class="blockList">
 <h4>propagate</h4>
-<pre>public static&nbsp;&lt;V&gt;&nbsp;V&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1479">propagate</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;&nbsp;callable)</pre>
+<pre>public static&nbsp;&lt;V&gt;&nbsp;V&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1505">propagate</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;&nbsp;callable)</pre>
 </li>
 </ul>
 <a name="getReportingPeriod--">
@@ -374,7 +377,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockList">
 <li class="blockList">
 <h4>getReportingPeriod</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1488">getReportingPeriod</a>()</pre>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1514">getReportingPeriod</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#getReportingPeriod--">getReportingPeriod</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
@@ -387,7 +390,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testTakedown</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1494">testTakedown</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html#line.1520">testTakedown</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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html
index cf8601c..911863b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html
@@ -109,6 +109,9 @@ var activeTableTab = "activeTableTab";
 <li><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.PerformanceEvaluation.AsyncTableTest</a></li>
 <li>
 <ul class="inheritance">
+<li><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.PerformanceEvaluation.AsyncSequentialWriteTest</a></li>
+<li>
+<ul class="inheritance">
 <li>org.apache.hadoop.hbase.PerformanceEvaluation.AsyncRandomWriteTest</li>
 </ul>
 </li>
@@ -119,6 +122,8 @@ var activeTableTab = "activeTableTab";
 </ul>
 </li>
 </ul>
+</li>
+</ul>
 <div class="description">
 <ul class="blockList">
 <li class="blockList">
@@ -128,8 +133,8 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1503">PerformanceEvaluation.AsyncRandomWriteTest</a>
-extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncTableTest</a></pre>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1529">PerformanceEvaluation.AsyncRandomWriteTest</a>
+extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncSequentialWriteTest</a></pre>
 </li>
 </ul>
 </div>
@@ -197,23 +202,23 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
+<td class="colFirst"><code>protected byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html#generateRow-int-">generateRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.AsyncTableTest">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.AsyncSequentialWriteTest">
 <!--   -->
 </a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncTableTest</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#onTakedown--">onTakedown</a></code></li>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncSequentialWriteTest</a></h3>
+<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html#testRow-int-">testRow</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.AsyncTest">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.AsyncTableTest">
 <!--   -->
 </a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncTest</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#createConnection--">createConnection</a></code></li>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncTableTest</a></h3>
+<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
@@ -249,7 +254,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AsyncRandomWriteTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html#line.1504">AsyncRandomWriteTest</a>(org.apache.hadoop.hbase.client.AsyncConnection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html#line.1531">AsyncRandomWriteTest</a>(org.apache.hadoop.hbase.client.AsyncConnection&nbsp;con,
                      <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                      <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -262,21 +267,16 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="testRow-int-">
+<a name="generateRow-int-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>testRow</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html#line.1509">testRow</a>(int&nbsp;i)
-      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
-             <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>
+<h4>generateRow</h4>
+<pre>protected&nbsp;byte[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html#line.1536">generateRow</a>(int&nbsp;i)</pre>
 <dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">testRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></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>
-<dd><code><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></code></dd>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html#generateRow-int-">generateRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncSequentialWriteTest</a></code></dd>
 </dl>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html
index 9b95e8c..6f0cafd 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html
@@ -128,7 +128,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1543">PerformanceEvaluation.AsyncScanTest</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1541">PerformanceEvaluation.AsyncScanTest</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncTableTest</a></pre>
 </li>
 </ul>
@@ -216,8 +216,10 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html#onStartup--">onStartup</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>
+<div class="block">Test for individual row.</div>
+</td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
@@ -232,13 +234,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.AsyncTest">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncTest</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -272,7 +267,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockList">
 <li class="blockList">
 <h4>testScanner</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.client.ResultScanner <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html#line.1544">testScanner</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.client.ResultScanner <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html#line.1542">testScanner</a></pre>
 </li>
 </ul>
 <a name="asyncTable">
@@ -281,7 +276,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockListLast">
 <li class="blockList">
 <h4>asyncTable</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.client.AsyncTable&lt;?&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html#line.1545">asyncTable</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.client.AsyncTable&lt;?&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html#line.1543">asyncTable</a></pre>
 </li>
 </ul>
 </li>
@@ -298,7 +293,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AsyncScanTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html#line.1547">AsyncScanTest</a>(org.apache.hadoop.hbase.client.AsyncConnection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html#line.1545">AsyncScanTest</a>(org.apache.hadoop.hbase.client.AsyncConnection&nbsp;con,
               <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
               <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -317,7 +312,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockList">
 <li class="blockList">
 <h4>onStartup</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html#line.1552">onStartup</a>()
+<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html#line.1550">onStartup</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>
@@ -333,7 +328,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockList">
 <li class="blockList">
 <h4>testTakedown</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html#line.1559">testTakedown</a>()
+<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html#line.1557">testTakedown</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>
@@ -349,11 +344,19 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testRow</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html#line.1568">testRow</a>(int&nbsp;i)
-      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html#line.1566">testRow</a>(int&nbsp;i)
+         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">PerformanceEvaluation.TestBase</a></code></span></div>
+<div class="block">Test for individual row.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">testRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>i</code> - Row index.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the row was sent to server and need to record metrics.
+         False if not, multiGet and multiPut e.g., the rows are sent
+         to server only if enough gets/puts are gathered.</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>
 </dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html
index 16e3d05..a4f9d9b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html
@@ -128,7 +128,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1595">PerformanceEvaluation.AsyncSequentialReadTest</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1594">PerformanceEvaluation.AsyncSequentialReadTest</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncTableTest</a></pre>
 </li>
 </ul>
@@ -197,8 +197,10 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>
+<div class="block">Test for individual row.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -209,13 +211,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.AsyncTest">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncTest</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -249,7 +244,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AsyncSequentialReadTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html#line.1596">AsyncSequentialReadTest</a>(org.apache.hadoop.hbase.client.AsyncConnection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html#line.1595">AsyncSequentialReadTest</a>(org.apache.hadoop.hbase.client.AsyncConnection&nbsp;con,
                         <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                         <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -268,12 +263,20 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testRow</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html#line.1601">testRow</a>(int&nbsp;i)
-      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
-             <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>
+<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html#line.1600">testRow</a>(int&nbsp;i)
+         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
+                <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"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">PerformanceEvaluation.TestBase</a></code></span></div>
+<div class="block">Test for individual row.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">testRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>i</code> - Row index.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the row was sent to server and need to record metrics.
+         False if not, multiGet and multiPut e.g., the rows are sent
+         to server only if enough gets/puts are gathered.</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>
 <dd><code><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></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html
index 06343c9..5f4f896 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10};
+var methods = {"i0":10,"i1":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -75,13 +75,13 @@ var activeTableTab = "activeTableTab";
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.AsyncTableTest">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.detail">Method</a></li>
 </ul>
@@ -123,6 +123,10 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <dl>
+<dt>Direct Known Subclasses:</dt>
+<dd><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncRandomWriteTest</a></dd>
+</dl>
+<dl>
 <dt>Enclosing class:</dt>
 <dd><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation</a></dd>
 </dl>
@@ -142,6 +146,17 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <!--   -->
 </a>
 <h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;org.apache.hadoop.hbase.client.Put&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html#puts">puts</a></span></code>&nbsp;</td>
+</tr>
+</table>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.AsyncTableTest">
 <!--   -->
@@ -197,8 +212,14 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
+<td class="colFirst"><code>protected byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html#generateRow-int-">generateRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>
+<div class="block">Test for individual row.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -209,13 +230,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.AsyncTest">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncTest</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -237,6 +251,23 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <div class="details">
 <ul class="blockList">
 <li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="puts">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>puts</h4>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;org.apache.hadoop.hbase.client.Put&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html#line.1626">puts</a></pre>
+</li>
+</ul>
+</li>
+</ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
 <ul class="blockList">
 <li class="blockList"><a name="constructor.detail">
@@ -249,7 +280,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AsyncSequentialWriteTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html#line.1626">AsyncSequentialWriteTest</a>(org.apache.hadoop.hbase.client.AsyncConnection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html#line.1628">AsyncSequentialWriteTest</a>(org.apache.hadoop.hbase.client.AsyncConnection&nbsp;con,
                          <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                          <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -262,18 +293,35 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="generateRow-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>generateRow</h4>
+<pre>protected&nbsp;byte[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html#line.1636">generateRow</a>(int&nbsp;i)</pre>
+</li>
+</ul>
 <a name="testRow-int-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testRow</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html#line.1631">testRow</a>(int&nbsp;i)
-      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
-             <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>
+<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html#line.1642">testRow</a>(int&nbsp;i)
+         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
+                <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"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">PerformanceEvaluation.TestBase</a></code></span></div>
+<div class="block">Test for individual row.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">testRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>i</code> - Row index.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the row was sent to server and need to record metrics.
+         False if not, multiGet and multiPut e.g., the rows are sent
+         to server only if enough gets/puts are gathered.</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>
 <dd><code><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></code></dd>
@@ -334,13 +382,13 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.AsyncTableTest">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.detail">Method</a></li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html
index a626ac7..d28a42a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html
@@ -119,7 +119,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncRandomReadTest</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncRandomWriteTest</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncScanTest</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncSequentialReadTest</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncSequentialWriteTest</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncRandomReadTest</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncScanTest</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncSequentialReadTest</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncSequentialWriteTest</a></dd>
 </dl>
 <dl>
 <dt>Enclosing class:</dt>
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>abstract static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1402">PerformanceEvaluation.AsyncTableTest</a>
+<pre>abstract static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1425">PerformanceEvaluation.AsyncTableTest</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncTest</a></pre>
 </li>
 </ul>
@@ -209,13 +209,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 </tr>
 </table>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.AsyncTest">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.AsyncTest</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -249,7 +242,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockListLast">
 <li class="blockList">
 <h4>table</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.client.AsyncTable&lt;?&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#line.1403">table</a></pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.client.AsyncTable&lt;?&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#line.1426">table</a></pre>
 </li>
 </ul>
 </li>
@@ -266,7 +259,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AsyncTableTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#line.1405">AsyncTableTest</a>(org.apache.hadoop.hbase.client.AsyncConnection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#line.1428">AsyncTableTest</a>(org.apache.hadoop.hbase.client.AsyncConnection&nbsp;con,
                <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -285,7 +278,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockList">
 <li class="blockList">
 <h4>onStartup</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#line.1410">onStartup</a>()
+<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#line.1433">onStartup</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">Specified by:</span></dt>
@@ -301,7 +294,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Async
 <ul class="blockListLast">
 <li class="blockList">
 <h4>onTakedown</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#line.1415">onTakedown</a>()
+<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html#line.1438">onTakedown</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">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html
index f54d04b..ba76772 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html
@@ -18,12 +18,6 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
 </script>
 <noscript>
 <div>JavaScript is disabled on your browser.</div>
@@ -77,13 +71,13 @@ var activeTableTab = "activeTableTab";
 <li>Nested&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
+<li><a href="#methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">Method</a></li>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
 <li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
+<li>Method</li>
 </ul>
 </div>
 <a name="skip.navbar.top">
@@ -122,7 +116,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>abstract static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1357">PerformanceEvaluation.AsyncTest</a>
+<pre>abstract static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1398">PerformanceEvaluation.AsyncTest</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></pre>
 </li>
 </ul>
@@ -181,21 +175,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestB
 <!--   -->
 </a>
 <h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#closeConnection--">closeConnection</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#createConnection--">createConnection</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
@@ -230,7 +209,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestB
 <ul class="blockListLast">
 <li class="blockList">
 <h4>connection</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.client.AsyncConnection <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#line.1358">connection</a></pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.client.AsyncConnection <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#line.1399">connection</a></pre>
 </li>
 </ul>
 </li>
@@ -247,50 +226,13 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestB
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AsyncTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#line.1360">AsyncTest</a>(org.apache.hadoop.hbase.client.AsyncConnection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#line.1401">AsyncTest</a>(org.apache.hadoop.hbase.client.AsyncConnection&nbsp;con,
           <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
           <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
 </ul>
 </li>
 </ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="createConnection--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>createConnection</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#line.1366">createConnection</a>()</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#createConnection--">createConnection</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="closeConnection--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>closeConnection</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html#line.1377">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="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#closeConnection--">closeConnection</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></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>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
 </li>
 </ul>
 </div>
@@ -345,13 +287,13 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestB
 <li>Nested&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
+<li><a href="#methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">Method</a></li>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
 <li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
+<li>Method</li>
 </ul>
 </div>
 <a name="skip.navbar.bottom">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html
index ee238e0..d5b6cf2 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html
@@ -119,7 +119,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.RandomWriteTest</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.SequentialWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.SequentialWriteTest</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.SequentialWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.SequentialWriteTest</a></dd>
 </dl>
 <dl>
 <dt>Enclosing class:</dt>
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>abstract static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1665">PerformanceEvaluation.BufferedMutatorTest</a>
+<pre>abstract static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1688">PerformanceEvaluation.BufferedMutatorTest</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></pre>
 </li>
 </ul>
@@ -213,13 +213,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.
 </tr>
 </table>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.Test">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -253,7 +246,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.
 <ul class="blockList">
 <li class="blockList">
 <h4>mutator</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.client.BufferedMutator <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html#line.1666">mutator</a></pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.client.BufferedMutator <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html#line.1689">mutator</a></pre>
 </li>
 </ul>
 <a name="table">
@@ -262,7 +255,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>table</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.client.Table <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html#line.1667">table</a></pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.client.Table <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html#line.1690">table</a></pre>
 </li>
 </ul>
 </li>
@@ -279,7 +272,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BufferedMutatorTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html#line.1669">BufferedMutatorTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html#line.1692">BufferedMutatorTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
                     <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                     <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -298,7 +291,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.
 <ul class="blockList">
 <li class="blockList">
 <h4>onStartup</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html#line.1674">onStartup</a>()
+<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html#line.1697">onStartup</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">Specified by:</span></dt>
@@ -314,7 +307,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>onTakedown</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html#line.1682">onTakedown</a>()
+<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html#line.1705">onTakedown</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">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html
index ae27398..0ad408b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html
@@ -132,7 +132,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>abstract static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1994">PerformanceEvaluation.CASTableTest</a>
+<pre>abstract static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1996">PerformanceEvaluation.CASTableTest</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TableTest</a></pre>
 <div class="block">Base class for operations that are CAS-like; that read a value and then set it based off what
  they read. In this category is increment, append, checkAndPut, etc.
@@ -238,13 +238,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.Test">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -278,7 +271,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockListLast">
 <li class="blockList">
 <h4>qualifier</h4>
-<pre>private final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html#line.1995">qualifier</a></pre>
+<pre>private final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html#line.1997">qualifier</a></pre>
 </li>
 </ul>
 </li>
@@ -295,7 +288,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CASTableTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html#line.1996">CASTableTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html#line.1998">CASTableTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
              <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
              <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -314,7 +307,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockList">
 <li class="blockList">
 <h4>getQualifier</h4>
-<pre>byte[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html#line.2001">getQualifier</a>()</pre>
+<pre>byte[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html#line.2003">getQualifier</a>()</pre>
 </li>
 </ul>
 <a name="getStartRow--">
@@ -323,7 +316,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartRow</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html#line.2006">getStartRow</a>()</pre>
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html#line.2008">getStartRow</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#getStartRow--">getStartRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
@@ -336,7 +329,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getLastRow</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html#line.2011">getLastRow</a>()</pre>
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html#line.2013">getLastRow</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#getLastRow--">getLastRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndDeleteTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndDeleteTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndDeleteTest.html
index 13831b3..7885403 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndDeleteTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndDeleteTest.html
@@ -133,7 +133,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2093">PerformanceEvaluation.CheckAndDeleteTest</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2099">PerformanceEvaluation.CheckAndDeleteTest</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.CASTableTest</a></pre>
 </li>
 </ul>
@@ -202,8 +202,10 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndDeleteTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndDeleteTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>
+<div class="block">Test for individual row.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -221,13 +223,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.Test">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -261,7 +256,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CheckAndDeleteTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndDeleteTest.html#line.2094">CheckAndDeleteTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndDeleteTest.html#line.2100">CheckAndDeleteTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
                    <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                    <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -280,11 +275,19 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testRow</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndDeleteTest.html#line.2099">testRow</a>(int&nbsp;i)
-      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndDeleteTest.html#line.2105">testRow</a>(int&nbsp;i)
+         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">PerformanceEvaluation.TestBase</a></code></span></div>
+<div class="block">Test for individual row.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">testRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>i</code> - Row index.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the row was sent to server and need to record metrics.
+         False if not, multiGet and multiPut e.g., the rows are sent
+         to server only if enough gets/puts are gathered.</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>
 </dl>


[44/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/CellComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/CellComparator.html b/devapidocs/org/apache/hadoop/hbase/CellComparator.html
index 696f78c..0e85790 100644
--- a/devapidocs/org/apache/hadoop/hbase/CellComparator.html
+++ b/devapidocs/org/apache/hadoop/hbase/CellComparator.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":17};
+var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":17,"i10":6};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -111,7 +111,7 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>@InterfaceAudience.Public
  @InterfaceStability.Evolving
-public interface <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.30">CellComparator</a>
+public interface <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.31">CellComparator</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;</pre>
 <div class="block">Comparator for comparing cells and has some specialized methods that allows comparing individual
  cell components like row, family, qualifier and timestamp</div>
@@ -206,6 +206,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <div class="block">A comparator for ordering cells in user-space tables.</div>
 </td>
 </tr>
+<tr id="i10" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#getSimpleComparator--">getSimpleComparator</a></span>()</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.util.Comparator">
@@ -234,7 +238,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>getInstance</h4>
-<pre>static&nbsp;<a href="../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.38">getInstance</a>()</pre>
+<pre>static&nbsp;<a href="../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.39">getInstance</a>()</pre>
 <div class="block">A comparator for ordering cells in user-space tables. Useful when writing cells in sorted
  order as necessary for bulk import (i.e. via MapReduce)
  <p>
@@ -248,7 +252,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compare</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.51">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.52">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
             <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares two cells. The key part of the cell is taken for comparison which
  includes row, family, qualifier, timestamp and type</div>
@@ -270,7 +274,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compare</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.59">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.60">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
             <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell,
             boolean&nbsp;ignoreSequenceid)</pre>
 <div class="block">Compare cells.</div>
@@ -289,7 +293,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.68">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.69">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                 <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares the rows of two cells.</div>
 <dl>
@@ -308,7 +312,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.80">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.81">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                 byte[]&nbsp;bytes,
                 int&nbsp;offset,
                 int&nbsp;length)</pre>
@@ -332,7 +336,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareWithoutRow</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.90">compareWithoutRow</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.91">compareWithoutRow</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                       <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares the two cells excluding the row part. It compares family, qualifier,
  timestamp and the type</div>
@@ -352,7 +356,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareFamilies</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.99">compareFamilies</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.100">compareFamilies</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                     <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares the families of the two cells</div>
 <dl>
@@ -371,7 +375,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareQualifiers</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.108">compareQualifiers</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.109">compareQualifiers</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                       <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares the qualifiers of the two cells</div>
 <dl>
@@ -390,7 +394,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTimestamps</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.120">compareTimestamps</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.121">compareTimestamps</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                       <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of
  newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found
@@ -409,10 +413,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <a name="compareTimestamps-long-long-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>compareTimestamps</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.132">compareTimestamps</a>(long&nbsp;leftCellts,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.133">compareTimestamps</a>(long&nbsp;leftCellts,
                       long&nbsp;rightCellts)</pre>
 <div class="block">Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of
  newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found
@@ -428,6 +432,21 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 </dl>
 </li>
 </ul>
+<a name="getSimpleComparator--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getSimpleComparator</h4>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.140">getSimpleComparator</a>()</pre>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>A dumbed-down, fast comparator for hbase2 base-type, the <a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase"><code>ByteBufferKeyValue</code></a>.
+   Create an instance when you make a new memstore, when you know only BBKVs will be passed.
+   Do not pollute with types other than BBKV if can be helped; the Comparator will slow.</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html b/devapidocs/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html
index 2f34143..832eec5 100644
--- a/devapidocs/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html
+++ b/devapidocs/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":9,"i2":10,"i3":10};
+var methods = {"i0":10,"i1":9,"i2":10,"i3":10,"i4":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.375">CellComparatorImpl.MetaCellComparator</a>
+<pre>public static class <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.299">CellComparatorImpl.MetaCellComparator</a>
 extends <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a></pre>
 <div class="block">A <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase"><code>CellComparatorImpl</code></a> for <code>hbase:meta</code> catalog table
  <a href="../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase"><code>KeyValue</code></a>s.</div>
@@ -225,6 +225,10 @@ extends <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" ti
 <div class="block">Compares the rows of the left and right cell.</div>
 </td>
 </tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html#getSimpleComparator--">getSimpleComparator</a></span>()</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.CellComparatorImpl">
@@ -274,7 +278,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" ti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MetaCellComparator</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html#line.375">MetaCellComparator</a>()</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html#line.299">MetaCellComparator</a>()</pre>
 </li>
 </ul>
 </li>
@@ -291,7 +295,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html#line.377">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html#line.302">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                        <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compareRows-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">CellComparatorImpl</a></code></span></div>
 <div class="block">Compares the rows of the left and right cell.
@@ -316,7 +320,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html#line.383">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html#line.308">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                        byte[]&nbsp;right,
                        int&nbsp;roffset,
                        int&nbsp;rlength)</pre>
@@ -346,10 +350,10 @@ extends <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>compare</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html#line.389">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;a,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html#line.314">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;a,
                    <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;b,
                    boolean&nbsp;ignoreSequenceid)</pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compare-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-boolean-">CellComparatorImpl</a></code></span></div>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compare-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-boolean-">CellComparator</a></code></span></div>
 <div class="block">Compare cells.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -357,7 +361,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" ti
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compare-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-boolean-">compare</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a></code></dd>
 <dd><code>ignoreSequenceid</code> - True if we are to compare the key portion only and ignore
-  the sequenceid. Set to false to compare key and consider sequenceid.</dd>
+ the sequenceid. Set to false to compare key and consider sequenceid.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>0 if equal, -1 if a &lt; b, and +1 if a &gt; b.</dd>
 </dl>
@@ -366,10 +370,10 @@ extends <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" ti
 <a name="compareRows-byte:A-int-int-byte:A-int-int-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>private static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html#line.404">compareRows</a>(byte[]&nbsp;left,
+<pre>private static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html#line.329">compareRows</a>(byte[]&nbsp;left,
                                int&nbsp;loffset,
                                int&nbsp;llength,
                                byte[]&nbsp;right,
@@ -377,6 +381,25 @@ extends <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" ti
                                int&nbsp;rlength)</pre>
 </li>
 </ul>
+<a name="getSimpleComparator--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getSimpleComparator</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.MetaCellComparator.html#line.381">getSimpleComparator</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#getSimpleComparator--">getSimpleComparator</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a></code></dd>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#getSimpleComparator--">getSimpleComparator</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a></code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>A dumbed-down, fast comparator for hbase2 base-type, the <a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase"><code>ByteBufferKeyValue</code></a>.
+   Create an instance when you make a new memstore, when you know only BBKVs will be passed.
+   Do not pollute with types other than BBKV if can be helped; the Comparator will slow.</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/CellComparatorImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/CellComparatorImpl.html b/devapidocs/org/apache/hadoop/hbase/CellComparatorImpl.html
index 25d1594..33179ad 100644
--- a/devapidocs/org/apache/hadoop/hbase/CellComparatorImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/CellComparatorImpl.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":9,"i12":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":9,"i8":10,"i9":10,"i10":10,"i11":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -119,7 +119,7 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>@InterfaceAudience.Private
  @InterfaceStability.Evolving
-public class <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.46">CellComparatorImpl</a>
+public class <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.53">CellComparatorImpl</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>
 implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a></pre>
 <div class="block">Compare two HBase cells.  Do not use this method comparing <code>-ROOT-</code> or
@@ -127,9 +127,13 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
  takes account of the special formatting of the row where we have commas to delimit table from
  regionname, from row.  See KeyValue for how it has a special comparator to do hbase:meta cells
  and yet another for -ROOT-.
- While using this comparator for {<a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compareRows-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-"><code>compareRows(Cell, Cell)</code></a> et al, the hbase:meta cells
+ <p>While using this comparator for {<a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compareRows-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-"><code>compareRows(Cell, Cell)</code></a> et al, the hbase:meta cells
  format should be taken into consideration, for which the instance of this comparator
- should be used.  In all other cases the static APIs in this comparator would be enough</div>
+ should be used.  In all other cases the static APIs in this comparator would be enough
+ <p>HOT methods. We spend a good portion of CPU comparing. Anything that makes the compare
+ faster will likely manifest at the macro level. See also
+ <a href="../../../../org/apache/hadoop/hbase/BBKVComparator.html" title="class in org.apache.hadoop.hbase"><code>BBKVComparator</code></a>. Use it when mostly <a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase"><code>ByteBufferKeyValue</code></a>s.
+ </p></div>
 </li>
 </ul>
 </div>
@@ -235,34 +239,27 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
 </td>
 </tr>
 <tr id="i2" class="altColor">
-<td class="colFirst"><code>private static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compareByteBufferKeyValue-org.apache.hadoop.hbase.ByteBufferKeyValue-org.apache.hadoop.hbase.ByteBufferKeyValue-">compareByteBufferKeyValue</a></span>(<a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferKeyValue</a>&nbsp;left,
-                         <a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferKeyValue</a>&nbsp;right)</code>
-<div class="block">Specialized comparator for the ByteBufferKeyValue type exclusivesly.</div>
-</td>
-</tr>
-<tr id="i3" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compareColumns-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compareColumns</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
               <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right)</code>
 <div class="block">Compares the family and qualifier part of the cell</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compareFamilies-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compareFamilies</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right)</code>
 <div class="block">Compare the families of left and right cell</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compareQualifiers-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compareQualifiers</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                  <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right)</code>
 <div class="block">Compare the qualifiers part of the left and right cells.</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compareRows-org.apache.hadoop.hbase.Cell-byte:A-int-int-">compareRows</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
            byte[]&nbsp;right,
@@ -272,46 +269,45 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
  stopRow in Scan.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compareRows-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compareRows</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
            <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right)</code>
 <div class="block">Compares the rows of the left and right cell.</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
-<td class="colFirst"><code>(package private) int</code></td>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>(package private) static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compareRows-org.apache.hadoop.hbase.Cell-int-org.apache.hadoop.hbase.Cell-int-">compareRows</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
            int&nbsp;leftRowLength,
            <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right,
            int&nbsp;rightRowLength)</code>&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compareTimestamps-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compareTimestamps</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                  <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right)</code>
 <div class="block">Compares cell's timestamps in DESCENDING order.</div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compareTimestamps-long-long-">compareTimestamps</a></span>(long&nbsp;ltimestamp,
                  long&nbsp;rtimestamp)</code>
 <div class="block">Compares cell's timestamps in DESCENDING order.</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
-<td class="colFirst"><code>private static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compareTimestampsInternal-long-long-">compareTimestampsInternal</a></span>(long&nbsp;ltimestamp,
-                         long&nbsp;rtimestamp)</code>&nbsp;</td>
-</tr>
-<tr id="i12" class="altColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compareWithoutRow-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compareWithoutRow</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                  <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right)</code>
 <div class="block">Lexographically compares the two cells excluding the row part.</div>
 </td>
 </tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#getSimpleComparator--">getSimpleComparator</a></span>()</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -354,7 +350,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>static final&nbsp;org.slf4j.Logger <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.47">LOG</a></pre>
+<pre>static final&nbsp;org.slf4j.Logger <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.54">LOG</a></pre>
 </li>
 </ul>
 <a name="COMPARATOR">
@@ -363,7 +359,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>COMPARATOR</h4>
-<pre>public static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a> <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.52">COMPARATOR</a></pre>
+<pre>public static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a> <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.59">COMPARATOR</a></pre>
 <div class="block">Comparator for plain key/values; i.e. non-catalog table key/values. Works on Key portion
  of KeyValue only.</div>
 </li>
@@ -374,7 +370,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>META_COMPARATOR</h4>
-<pre>public static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a> <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.57">META_COMPARATOR</a></pre>
+<pre>public static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a> <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.64">META_COMPARATOR</a></pre>
 <div class="block">A <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase"><code>CellComparatorImpl</code></a> for <code>hbase:meta</code> catalog table
  <a href="../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase"><code>KeyValue</code></a>s.</div>
 </li>
@@ -393,7 +389,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CellComparatorImpl</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.46">CellComparatorImpl</a>()</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.53">CellComparatorImpl</a>()</pre>
 </li>
 </ul>
 </li>
@@ -410,8 +406,8 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>compare</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.60">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;a,
-                   <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;b)</pre>
+<pre>public final&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.67">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;a,
+                         <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;b)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compare-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">CellComparator</a></code></span></div>
 <div class="block">Lexographically compares two cells. The key part of the cell is taken for comparison which
  includes row, family, qualifier, timestamp and type</div>
@@ -435,41 +431,28 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>compare</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.71">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;a,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.72">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;a,
                    <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;b,
                    boolean&nbsp;ignoreSequenceid)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compare-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-boolean-">CellComparator</a></code></span></div>
 <div class="block">Compare cells.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compare-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-boolean-">compare</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a></code></dd>
-<dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>ignoreSequenceid</code> - True if we are to compare the key portion only and ignore
-  the sequenceid. Set to false to compare key and consider sequenceid.</dd>
+ the sequenceid. Set to false to compare key and consider sequenceid.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>0 if equal, -1 if a &lt; b, and +1 if a &gt; b.</dd>
 </dl>
 </li>
 </ul>
-<a name="compareByteBufferKeyValue-org.apache.hadoop.hbase.ByteBufferKeyValue-org.apache.hadoop.hbase.ByteBufferKeyValue-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>compareByteBufferKeyValue</h4>
-<pre>private static final&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.99">compareByteBufferKeyValue</a>(<a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferKeyValue</a>&nbsp;left,
-                                                   <a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferKeyValue</a>&nbsp;right)</pre>
-<div class="block">Specialized comparator for the ByteBufferKeyValue type exclusivesly.
- Caches deserialized lengths of rows and families, etc., and reuses them where it can
- (ByteBufferKeyValue has been changed to be amenable to our providing pre-made lengths, etc.)</div>
-</li>
-</ul>
 <a name="compareColumns-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>compareColumns</h4>
-<pre>public final&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.173">compareColumns</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
+<pre>public final&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.101">compareColumns</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                                 <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right)</pre>
 <div class="block">Compares the family and qualifier part of the cell</div>
 <dl>
@@ -484,7 +467,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>compareFamilies</h4>
-<pre>public final&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.186">compareFamilies</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
+<pre>public final&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.114">compareFamilies</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                                  <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right)</pre>
 <div class="block">Compare the families of left and right cell</div>
 <dl>
@@ -504,7 +487,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>compareQualifiers</h4>
-<pre>public final&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.217">compareQualifiers</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
+<pre>public final&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.145">compareQualifiers</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                                    <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right)</pre>
 <div class="block">Compare the qualifiers part of the left and right cells.</div>
 <dl>
@@ -524,7 +507,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.253">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.181">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                        <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right)</pre>
 <div class="block">Compares the rows of the left and right cell.
  For the hbase:meta case this method is overridden such that it can handle hbase:meta cells.
@@ -546,10 +529,10 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.257">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
-                int&nbsp;leftRowLength,
-                <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right,
-                int&nbsp;rightRowLength)</pre>
+<pre>static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.185">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
+                       int&nbsp;leftRowLength,
+                       <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right,
+                       int&nbsp;rightRowLength)</pre>
 </li>
 </ul>
 <a name="compareRows-org.apache.hadoop.hbase.Cell-byte:A-int-int-">
@@ -558,7 +541,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.303">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.231">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                        byte[]&nbsp;right,
                        int&nbsp;roffset,
                        int&nbsp;rlength)</pre>
@@ -585,7 +568,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>compareWithoutRow</h4>
-<pre>public final&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.314">compareWithoutRow</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
+<pre>public final&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.242">compareWithoutRow</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                                    <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareWithoutRow-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">CellComparator</a></code></span></div>
 <div class="block">Lexographically compares the two cells excluding the row part. It compares family, qualifier,
@@ -608,7 +591,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTimestamps</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.357">compareTimestamps</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.285">compareTimestamps</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
                              <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareTimestamps-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">CellComparator</a></code></span></div>
 <div class="block">Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of
@@ -633,7 +616,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTimestamps</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.362">compareTimestamps</a>(long&nbsp;ltimestamp,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.290">compareTimestamps</a>(long&nbsp;ltimestamp,
                              long&nbsp;rtimestamp)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareTimestamps-long-long-">CellComparator</a></code></span></div>
 <div class="block">Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of
@@ -652,14 +635,21 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
 </dl>
 </li>
 </ul>
-<a name="compareTimestampsInternal-long-long-">
+<a name="getSimpleComparator--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>compareTimestampsInternal</h4>
-<pre>private static final&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.366">compareTimestampsInternal</a>(long&nbsp;ltimestamp,
-                                                   long&nbsp;rtimestamp)</pre>
+<h4>getSimpleComparator</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparatorImpl.html#line.387">getSimpleComparator</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#getSimpleComparator--">getSimpleComparator</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a></code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>A dumbed-down, fast comparator for hbase2 base-type, the <a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase"><code>ByteBufferKeyValue</code></a>.
+   Create an instance when you make a new memstore, when you know only BBKVs will be passed.
+   Do not pollute with types other than BBKV if can be helped; the Comparator will slow.</dd>
+</dl>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/ExtendedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ExtendedCell.html b/devapidocs/org/apache/hadoop/hbase/ExtendedCell.html
index 6e0237f..fbcad1d 100644
--- a/devapidocs/org/apache/hadoop/hbase/ExtendedCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/ExtendedCell.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":18,"i1":18,"i2":6,"i3":18,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":18,"i12":18};
+var methods = {"i0":18,"i1":18,"i2":6,"i3":18,"i4":18,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":18,"i13":18};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -101,7 +101,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Superinterfaces:</dt>
-<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>All Known Implementing Classes:</dt>
@@ -111,7 +111,7 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>@InterfaceAudience.Private
 public interface <a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.33">ExtendedCell</a>
-extends <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a></pre>
+extends <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a></pre>
 <div class="block">Extension to <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> with server side required functions. Server side Cell implementations
  must implement this.</div>
 </li>
@@ -194,54 +194,58 @@ extends <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interf
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>default int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a></span>(boolean&nbsp;withTags)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i4" class="altColor">
+<td class="colFirst"><code>default int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a></span>(boolean&nbsp;withTags)</code>&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getTagsArray--">getTagsArray</a></span>()</code>
 <div class="block">Contiguous raw bytes representing tags that may start at any index in the containing array.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getTagsLength--">getTagsLength</a></span>()</code>
 <div class="block">HBase internally uses 2 bytes to store tags length in Cell.</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getTagsOffset--">getTagsOffset</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>byte</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getTypeByte--">getTypeByte</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#setSequenceId-long-">setSequenceId</a></span>(long&nbsp;seqId)</code>
 <div class="block">Sets with the given seqId.</div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#setTimestamp-byte:A-">setTimestamp</a></span>(byte[]&nbsp;ts)</code>
 <div class="block">Sets with the given timestamp.</div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#setTimestamp-long-">setTimestamp</a></span>(long&nbsp;ts)</code>
 <div class="block">Sets with the given timestamp.</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>default void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
      int&nbsp;offset)</code>
 <div class="block">Write this Cell into the given buf's offset in a <a href="../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase"><code>KeyValue</code></a> format.</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>default int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></span>(<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;out,
      boolean&nbsp;withTags)</code>
@@ -290,7 +294,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interf
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CELL_NOT_BASED_ON_CHUNK</h4>
-<pre>static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.35">CELL_NOT_BASED_ON_CHUNK</a></pre>
+<pre>static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.34">CELL_NOT_BASED_ON_CHUNK</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.ExtendedCell.CELL_NOT_BASED_ON_CHUNK">Constant Field Values</a></dd>
@@ -351,13 +355,26 @@ extends <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interf
 </dl>
 </li>
 </ul>
+<a name="getSerializedSize--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getSerializedSize</h4>
+<pre>default&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.93">getSerializedSize</a>()</pre>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Serialized size (defaults to include tag length).</dd>
+</dl>
+</li>
+</ul>
 <a name="write-java.nio.ByteBuffer-int-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>write</h4>
-<pre>default&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.95">write</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
+<pre>default&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.102">write</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
                    int&nbsp;offset)</pre>
 <div class="block">Write this Cell into the given buf's offset in a <a href="../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase"><code>KeyValue</code></a> format.</div>
 <dl>
@@ -373,7 +390,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interf
 <ul class="blockList">
 <li class="blockList">
 <h4>deepClone</h4>
-<pre>default&nbsp;<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.103">deepClone</a>()</pre>
+<pre>default&nbsp;<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.110">deepClone</a>()</pre>
 <div class="block">Does a deep copy of the contents to a new memory area and returns it as a new cell.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -387,12 +404,13 @@ extends <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interf
 <ul class="blockList">
 <li class="blockList">
 <h4>getChunkId</h4>
-<pre>default&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.113">getChunkId</a>()</pre>
+<pre>default&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.121">getChunkId</a>()</pre>
 <div class="block">Extracts the id of the backing bytebuffer of this cell if it was obtained from fixed sized
  chunks as in case of MemstoreLAB</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>the chunk id if the cell is backed by fixed sized Chunks, else return -1</dd>
+<dd>the chunk id if the cell is backed by fixed sized Chunks, else return
+ <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#CELL_NOT_BASED_ON_CHUNK"><code>CELL_NOT_BASED_ON_CHUNK</code></a>; i.e. -1.</dd>
 </dl>
 </li>
 </ul>
@@ -402,7 +420,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interf
 <ul class="blockList">
 <li class="blockList">
 <h4>setSequenceId</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.121">setSequenceId</a>(long&nbsp;seqId)
+<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.129">setSequenceId</a>(long&nbsp;seqId)
             throws <a href="https://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 with the given seqId.</div>
 <dl>
@@ -419,7 +437,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interf
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimestamp</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.127">setTimestamp</a>(long&nbsp;ts)
+<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.135">setTimestamp</a>(long&nbsp;ts)
            throws <a href="https://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 with the given timestamp.</div>
 <dl>
@@ -436,7 +454,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interf
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimestamp</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.133">setTimestamp</a>(byte[]&nbsp;ts)
+<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.141">setTimestamp</a>(byte[]&nbsp;ts)
            throws <a href="https://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 with the given timestamp.</div>
 <dl>
@@ -453,7 +471,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interf
 <ul class="blockList">
 <li class="blockList">
 <h4>getSequenceId</h4>
-<pre>long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.142">getSequenceId</a>()</pre>
+<pre>long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.150">getSequenceId</a>()</pre>
 <div class="block">A region-specific unique monotonically increasing sequence ID given to each Cell. It always
  exists for cells in the memstore but is not retained forever. It will be kept for
  <a href="../../../../org/apache/hadoop/hbase/HConstants.html#KEEP_SEQID_PERIOD"><code>HConstants.KEEP_SEQID_PERIOD</code></a> days, but generally becomes irrelevant after the cell's
@@ -472,7 +490,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interf
 <ul class="blockList">
 <li class="blockList">
 <h4>getTagsArray</h4>
-<pre>byte[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.148">getTagsArray</a>()</pre>
+<pre>byte[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.156">getTagsArray</a>()</pre>
 <div class="block">Contiguous raw bytes representing tags that may start at any index in the containing array.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -488,7 +506,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interf
 <ul class="blockList">
 <li class="blockList">
 <h4>getTagsOffset</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.153">getTagsOffset</a>()</pre>
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.161">getTagsOffset</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/Cell.html#getTagsOffset--">getTagsOffset</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>
@@ -503,7 +521,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interf
 <ul class="blockList">
 <li class="blockList">
 <h4>getTagsLength</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.163">getTagsLength</a>()</pre>
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.171">getTagsLength</a>()</pre>
 <div class="block">HBase internally uses 2 bytes to store tags length in Cell. As the tags length is always a
  non-negative number, to make good use of the sign bit, the max of tags length is defined 2 *
  Short.MAX_VALUE + 1 = 65535. As a result, the return type is int, because a short is not
@@ -523,7 +541,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interf
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getTypeByte</h4>
-<pre>byte&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.168">getTypeByte</a>()</pre>
+<pre>byte&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ExtendedCell.html#line.176">getTypeByte</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/Cell.html#getTypeByte--">getTypeByte</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/IndividualBytesFieldCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/IndividualBytesFieldCell.html b/devapidocs/org/apache/hadoop/hbase/IndividualBytesFieldCell.html
index c8e8ddc..0ec9615 100644
--- a/devapidocs/org/apache/hadoop/hbase/IndividualBytesFieldCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/IndividualBytesFieldCell.html
@@ -116,7 +116,7 @@ var activeTableTab = "activeTableTab";
 <pre>@InterfaceAudience.Private
 public class <a href="../../../../src-html/org/apache/hadoop/hbase/IndividualBytesFieldCell.html#line.27">IndividualBytesFieldCell</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>
-implements <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></pre>
+implements <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a></pre>
 </li>
 </ul>
 </div>
@@ -451,7 +451,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html b/devapidocs/org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html
index 0d53feb..94ccf64 100644
--- a/devapidocs/org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html
+++ b/devapidocs/org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html
@@ -401,7 +401,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/KeyValue.html" title="class
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/KeyValue.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/KeyValue.html b/devapidocs/org/apache/hadoop/hbase/KeyValue.html
index 924c8cc..e8272a2 100644
--- a/devapidocs/org/apache/hadoop/hbase/KeyValue.html
+++ b/devapidocs/org/apache/hadoop/hbase/KeyValue.html
@@ -120,7 +120,7 @@ var activeTableTab = "activeTableTab";
 <pre>@InterfaceAudience.Private
 public class <a href="../../../../src-html/org/apache/hadoop/hbase/KeyValue.html#line.79">KeyValue</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>
-implements <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></pre>
+implements <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a></pre>
 <div class="block">An HBase Key/Value. This is the fundamental HBase Type.
  <p>
  HBase applications and users should use the Cell interface and avoid directly using KeyValue and
@@ -1119,7 +1119,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/NoTagsByteBufferKeyValue.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/NoTagsByteBufferKeyValue.html b/devapidocs/org/apache/hadoop/hbase/NoTagsByteBufferKeyValue.html
index 8aee42d..9ae9521 100644
--- a/devapidocs/org/apache/hadoop/hbase/NoTagsByteBufferKeyValue.html
+++ b/devapidocs/org/apache/hadoop/hbase/NoTagsByteBufferKeyValue.html
@@ -119,7 +119,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
@@ -260,7 +260,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" ti
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/NoTagsKeyValue.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/NoTagsKeyValue.html b/devapidocs/org/apache/hadoop/hbase/NoTagsKeyValue.html
index 6e62725..d9bca7e 100644
--- a/devapidocs/org/apache/hadoop/hbase/NoTagsKeyValue.html
+++ b/devapidocs/org/apache/hadoop/hbase/NoTagsKeyValue.html
@@ -246,7 +246,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/KeyValue.html" title="class
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.EmptyByteBufferExtendedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.EmptyByteBufferExtendedCell.html b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.EmptyByteBufferExtendedCell.html
index 62382f3..91bd0e0 100644
--- a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.EmptyByteBufferExtendedCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.EmptyByteBufferExtendedCell.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
@@ -354,7 +354,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/ByteBufferExtendedCell.html
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getTypeByte--">getTypeByte</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getTypeByte--">getTypeByte</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.EmptyCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.EmptyCell.html b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.EmptyCell.html
index 363f73b..591a69a 100644
--- a/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.EmptyCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/PrivateCellUtil.EmptyCell.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
@@ -310,7 +310,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getTypeByte--">getTypeByte</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#getTypeByte--">getTypeByte</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">


[48/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/apidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html b/apidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html
index efd186d..30a1259 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferUtils.html
@@ -58,1008 +58,1012 @@
 <span class="sourceLineNo">050</span>  public final static int NEXT_BIT_MASK = 1 &lt;&lt; 7;<a name="line.50"></a>
 <span class="sourceLineNo">051</span>  @VisibleForTesting<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  final static boolean UNSAFE_AVAIL = UnsafeAvailChecker.isAvailable();<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  @VisibleForTesting<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  final static boolean UNSAFE_UNALIGNED = UnsafeAvailChecker.unaligned();<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private ByteBufferUtils() {<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  }<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  /**<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   * Similar to {@link WritableUtils#writeVLong(java.io.DataOutput, long)},<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   * but writes to a {@link ByteBuffer}.<a name="line.61"></a>
-<span class="sourceLineNo">062</span>   */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static void writeVLong(ByteBuffer out, long i) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    if (i &gt;= -112 &amp;&amp; i &lt;= 127) {<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      out.put((byte) i);<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      return;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    }<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>    int len = -112;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    if (i &lt; 0) {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      i ^= -1L; // take one's complement<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      len = -120;<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>    long tmp = i;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    while (tmp != 0) {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      tmp = tmp &gt;&gt; 8;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      len--;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    }<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>    out.put((byte) len);<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>    len = (len &lt; -120) ? -(len + 120) : -(len + 112);<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>    for (int idx = len; idx != 0; idx--) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      int shiftbits = (idx - 1) * 8;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      long mask = 0xFFL &lt;&lt; shiftbits;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      out.put((byte) ((i &amp; mask) &gt;&gt; shiftbits));<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    }<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>   * Similar to {@link WritableUtils#readVLong(DataInput)} but reads from a<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * {@link ByteBuffer}.<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   */<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  public static long readVLong(ByteBuffer in) {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    byte firstByte = in.get();<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    int len = WritableUtils.decodeVIntSize(firstByte);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    if (len == 1) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      return firstByte;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    }<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    long i = 0;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    for (int idx = 0; idx &lt; len-1; idx++) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      byte b = in.get();<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      i = i &lt;&lt; 8;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      i = i | (b &amp; 0xFF);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    return (WritableUtils.isNegativeVInt(firstByte) ? (i ^ -1L) : i);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
+<span class="sourceLineNo">053</span>  public final static boolean UNSAFE_UNALIGNED = UnsafeAvailChecker.unaligned();<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private ByteBufferUtils() {<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  }<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  /**<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * Similar to {@link WritableUtils#writeVLong(java.io.DataOutput, long)},<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   * but writes to a {@link ByteBuffer}.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   */<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public static void writeVLong(ByteBuffer out, long i) {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    if (i &gt;= -112 &amp;&amp; i &lt;= 127) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      out.put((byte) i);<a name="line.64"></a>
+<span class="sourceLineNo">065</span>      return;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    }<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>    int len = -112;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    if (i &lt; 0) {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      i ^= -1L; // take one's complement<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      len = -120;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    }<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>    long tmp = i;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    while (tmp != 0) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      tmp = tmp &gt;&gt; 8;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      len--;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>    out.put((byte) len);<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>    len = (len &lt; -120) ? -(len + 120) : -(len + 112);<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>    for (int idx = len; idx != 0; idx--) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      int shiftbits = (idx - 1) * 8;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      long mask = 0xFFL &lt;&lt; shiftbits;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      out.put((byte) ((i &amp; mask) &gt;&gt; shiftbits));<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><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  /**<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * Similar to {@link WritableUtils#readVLong(DataInput)} but reads from a<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * {@link ByteBuffer}.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  public static long readVLong(ByteBuffer in) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    byte firstByte = in.get();<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    int len = WritableUtils.decodeVIntSize(firstByte);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    if (len == 1) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      return firstByte;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    long i = 0;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    for (int idx = 0; idx &lt; len-1; idx++) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      byte b = in.get();<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      i = i &lt;&lt; 8;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      i = i | (b &amp; 0xFF);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    return (WritableUtils.isNegativeVInt(firstByte) ? (i ^ -1L) : i);<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><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  /**<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * Put in buffer integer using 7 bit encoding. For each written byte:<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * 7 bits are used to store value<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * 1 bit is used to indicate whether there is next bit.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param value Int to be compressed.<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * @param out Where to put compressed data<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * @return Number of bytes written.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @throws IOException on stream error<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   public static int putCompressedInt(OutputStream out, final int value)<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      throws IOException {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    int i = 0;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    int tmpvalue = value;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    do {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      byte b = (byte) (tmpvalue &amp; VALUE_MASK);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      tmpvalue &gt;&gt;&gt;= NEXT_BIT_SHIFT;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      if (tmpvalue != 0) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        b |= (byte) NEXT_BIT_MASK;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      }<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      out.write(b);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      i++;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    } while (tmpvalue != 0);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    return i;<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>    * Put in output stream 32 bit integer (Big Endian byte order).<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    * @param out Where to put integer.<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    * @param value Value of integer.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    * @throws IOException On stream error.<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    */<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   public static void putInt(OutputStream out, final int value)<a name="line.143"></a>
-<span class="sourceLineNo">144</span>       throws IOException {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>     // We have writeInt in ByteBufferOutputStream so that it can directly write<a name="line.145"></a>
-<span class="sourceLineNo">146</span>     // int to underlying<a name="line.146"></a>
-<span class="sourceLineNo">147</span>     // ByteBuffer in one step.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>     if (out instanceof ByteBufferWriter) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>       ((ByteBufferWriter) out).writeInt(value);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>     } else {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>       StreamUtils.writeInt(out, value);<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>  public static byte toByte(ByteBuffer buffer, int offset) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    if (UNSAFE_AVAIL) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      return UnsafeAccess.toByte(buffer, offset);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    } else {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return buffer.get(offset);<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><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * Copy the data to the output stream and update position in buffer.<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * @param out the stream to write bytes to<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * @param in the buffer to read bytes from<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * @param length the number of bytes to copy<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   */<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  public static void moveBufferToStream(OutputStream out, ByteBuffer in,<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      int length) throws IOException {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    copyBufferToStream(out, in, in.position(), length);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    skip(in, length);<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>  /**<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * Copy data from a buffer to an output stream. Does not update the position<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * in the buffer.<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * @param out the stream to write bytes to<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * @param in the buffer to read bytes from<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * @param offset the offset in the buffer (from the buffer's array offset)<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   *      to start copying bytes from<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * @param length the number of bytes to copy<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  public static void copyBufferToStream(OutputStream out, ByteBuffer in,<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      int offset, int length) throws IOException {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    if (out instanceof ByteBufferWriter) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      ((ByteBufferWriter) out).write(in, offset, length);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    } else if (in.hasArray()) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      out.write(in.array(), in.arrayOffset() + offset, length);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    } else {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      for (int i = 0; i &lt; length; ++i) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        out.write(toByte(in, offset + i));<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>  }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>  /**<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * Copy data from a buffer to an output stream. Does not update the position<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   * in the buffer.<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * @param out the output stream to write bytes to<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * @param in the buffer to read bytes from<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * @param offset the offset in the buffer (from the buffer's array offset)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   *      to start copying bytes from<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * @param length the number of bytes to copy<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   */<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  public static void copyBufferToStream(DataOutput out, ByteBuffer in, int offset, int length)<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      throws IOException {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    if (out instanceof ByteBufferWriter) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      ((ByteBufferWriter) out).write(in, offset, length);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    } else if (in.hasArray()) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      out.write(in.array(), in.arrayOffset() + offset, length);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    } else {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      for (int i = 0; i &lt; length; ++i) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        out.write(toByte(in, offset + i));<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>  }<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>  public static int putLong(OutputStream out, final long value,<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      final int fitInBytes) throws IOException {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    long tmpValue = value;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    for (int i = 0; i &lt; fitInBytes; ++i) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      out.write((byte) (tmpValue &amp; 0xff));<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      tmpValue &gt;&gt;&gt;= 8;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    return fitInBytes;<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>  public static int putByte(ByteBuffer buffer, int offset, byte b) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    if (UNSAFE_AVAIL) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      return UnsafeAccess.putByte(buffer, offset, b);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    } else {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      buffer.put(offset, b);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      return offset + 1;<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>  /**<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * Check how many bytes are required to store value.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   * @param value Value which size will be tested.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * @return How many bytes are required to store value.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   */<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static int longFitsIn(final long value) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    if (value &lt; 0) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      return 8;<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>    if (value &lt; (1L &lt;&lt; (4 * 8))) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      // no more than 4 bytes<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      if (value &lt; (1L &lt;&lt; (2 * 8))) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        if (value &lt; (1L &lt;&lt; (1 * 8))) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          return 1;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        return 2;<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      if (value &lt; (1L &lt;&lt; (3 * 8))) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        return 3;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      return 4;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // more than 4 bytes<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    if (value &lt; (1L &lt;&lt; (6 * 8))) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      if (value &lt; (1L &lt;&lt; (5 * 8))) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        return 5;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      }<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      return 6;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    if (value &lt; (1L &lt;&lt; (7 * 8))) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      return 7;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    return 8;<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>   * Check how many bytes is required to store value.<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * @param value Value which size will be tested.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   * @return How many bytes are required to store value.<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   */<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public static int intFitsIn(final int value) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    if (value &lt; 0) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      return 4;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    if (value &lt; (1 &lt;&lt; (2 * 8))) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      if (value &lt; (1 &lt;&lt; (1 * 8))) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        return 1;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      return 2;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    if (value &lt;= (1 &lt;&lt; (3 * 8))) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      return 3;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    return 4;<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>  /**<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * Read integer from stream coded in 7 bits and increment position.<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @return the integer that has been read<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * @throws IOException<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   */<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  public static int readCompressedInt(InputStream input)<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      throws IOException {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    int result = 0;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    int i = 0;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    byte b;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    do {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      b = (byte) input.read();<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      result += (b &amp; VALUE_MASK) &lt;&lt; (NEXT_BIT_SHIFT * i);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      i++;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      if (i &gt; Bytes.SIZEOF_INT + 1) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        throw new IllegalStateException(<a name="line.311"></a>
-<span class="sourceLineNo">312</span>            "Corrupted compressed int (too long: " + (i + 1) + " bytes)");<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    } while (0 != (b &amp; NEXT_BIT_MASK));<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    return result;<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>  /**<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * Read integer from buffer coded in 7 bits and increment position.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * @return Read integer.<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   */<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  public static int readCompressedInt(ByteBuffer buffer) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    byte b = buffer.get();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    if ((b &amp; NEXT_BIT_MASK) != 0) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      return (b &amp; VALUE_MASK) + (readCompressedInt(buffer) &lt;&lt; NEXT_BIT_SHIFT);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return b &amp; VALUE_MASK;<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>  /**<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * Read long which was written to fitInBytes bytes and increment position.<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @param fitInBytes In how many bytes given long is stored.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   * @return The value of parsed long.<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   * @throws IOException<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   */<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  public static long readLong(InputStream in, final int fitInBytes)<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      throws IOException {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    long tmpLong = 0;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    for (int i = 0; i &lt; fitInBytes; ++i) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      tmpLong |= (in.read() &amp; 0xffL) &lt;&lt; (8 * i);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    return tmpLong;<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>   * Read long which was written to fitInBytes bytes and increment position.<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * @param fitInBytes In how many bytes given long is stored.<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * @return The value of parsed long.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  public static long readLong(ByteBuffer in, final int fitInBytes) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    long tmpLength = 0;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    for (int i = 0; i &lt; fitInBytes; ++i) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      tmpLength |= (in.get() &amp; 0xffL) &lt;&lt; (8L * i);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    return tmpLength;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  }<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>   * Copy the given number of bytes from the given stream and put it at the<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * current position of the given buffer, updating the position in the buffer.<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * @param out the buffer to write data to<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * @param in the stream to read data from<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   * @param length the number of bytes to read/write<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   */<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  public static void copyFromStreamToBuffer(ByteBuffer out,<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      DataInputStream in, int length) throws IOException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    if (out.hasArray()) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      in.readFully(out.array(), out.position() + out.arrayOffset(),<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          length);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      skip(out, length);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    } else {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      for (int i = 0; i &lt; length; ++i) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        out.put(in.readByte());<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><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  /**<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * Copy from the InputStream to a new heap ByteBuffer until the InputStream is exhausted.<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   */<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  public static ByteBuffer drainInputStreamToBuffer(InputStream is) throws IOException {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    IOUtils.copyBytes(is, baos, 4096, true);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    ByteBuffer buffer = ByteBuffer.wrap(baos.toByteArray());<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    buffer.rewind();<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    return buffer;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  /**<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   * Copy one buffer's whole data to another. Write starts at the current position of 'out' buffer.<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * Note : This will advance the position marker of {@code out} and also change the position maker<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   * for {@code in}.<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   * @param in source buffer<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   * @param out destination buffer<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   */<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  public static void copyFromBufferToBuffer(ByteBuffer in, ByteBuffer out) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    if (in.hasArray() &amp;&amp; out.hasArray()) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      int length = in.remaining();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      System.arraycopy(in.array(), in.arrayOffset(), out.array(), out.arrayOffset(), length);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      out.position(out.position() + length);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      in.position(in.limit());<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    } else if (UNSAFE_AVAIL) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      int length = in.remaining();<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      UnsafeAccess.copy(in, in.position(), out, out.position(), length);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      out.position(out.position() + length);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      in.position(in.limit());<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    } else {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      out.put(in);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    }<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>
-<span class="sourceLineNo">412</span>  /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * Copy from one buffer to another from given offset. This will be absolute positional copying and<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * won't affect the position of any of the buffers.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @param in<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @param out<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * @param sourceOffset<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * @param destinationOffset<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * @param length<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   */<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  public static void copyFromBufferToBuffer(ByteBuffer in, ByteBuffer out, int sourceOffset,<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      int destinationOffset, int length) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    if (in.hasArray() &amp;&amp; out.hasArray()) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      System.arraycopy(in.array(), sourceOffset + in.arrayOffset(), out.array(), out.arrayOffset()<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          + destinationOffset, length);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    } else if (UNSAFE_AVAIL) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      UnsafeAccess.copy(in, sourceOffset, out, destinationOffset, length);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    } else {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      ByteBuffer outDup = out.duplicate();<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      outDup.position(destinationOffset);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      ByteBuffer inDup = in.duplicate();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      inDup.position(sourceOffset).limit(sourceOffset + length);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      outDup.put(inDup);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    // We used to return a result but disabled; return destinationOffset + length;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  }<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>   * Copy from one buffer to another from given offset.<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * &lt;p&gt;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * Note : This will advance the position marker of {@code out} but not change the position maker<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * for {@code in}<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * @param in source buffer<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * @param out destination buffer<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * @param sourceOffset offset in the source buffer<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * @param length how many bytes to copy<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   */<a name="line.447"></a>
-<span class="sourceLineNo">448</span>  public static void copyFromBufferToBuffer(ByteBuffer in,<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      ByteBuffer out, int sourceOffset, int length) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    if (in.hasArray() &amp;&amp; out.hasArray()) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      System.arraycopy(in.array(), sourceOffset + in.arrayOffset(), out.array(), out.position()<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          + out.arrayOffset(), length);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      skip(out, length);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    } else if (UNSAFE_AVAIL) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      UnsafeAccess.copy(in, sourceOffset, out, out.position(), length);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      skip(out, length);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    } else {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      ByteBuffer inDup = in.duplicate();<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      inDup.position(sourceOffset).limit(sourceOffset + length);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      out.put(inDup);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    }<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>   * Find length of common prefix of two parts in the buffer<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   * @param buffer Where parts are located.<a name="line.466"></a>
-<span class="sourceLineNo">467</span>   * @param offsetLeft Offset of the first part.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * @param offsetRight Offset of the second part.<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * @param limit Maximal length of common prefix.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * @return Length of prefix.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
-<span class="sourceLineNo">472</span>  public static int findCommonPrefix(ByteBuffer buffer, int offsetLeft,<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      int offsetRight, int limit) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    int prefix = 0;<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span>    for (; prefix &lt; limit; ++prefix) {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      if (buffer.get(offsetLeft + prefix) != buffer.get(offsetRight + prefix)) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        break;<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><a name="line.481"></a>
-<span class="sourceLineNo">482</span>    return prefix;<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>  /**<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   * Find length of common prefix in two arrays.<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * @param left Array to be compared.<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   * @param leftOffset Offset in left array.<a name="line.488"></a>
-<span class="sourceLineNo">489</span>   * @param leftLength Length of left array.<a name="line.489"></a>
-<span class="sourceLineNo">490</span>   * @param right Array to be compared.<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * @param rightOffset Offset in right array.<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * @param rightLength Length of right array.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   */<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  public static int findCommonPrefix(<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      byte[] left, int leftOffset, int leftLength,<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      byte[] right, int rightOffset, int rightLength) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    int length = Math.min(leftLength, rightLength);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    int result = 0;<a name="line.498"></a>
-<span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    while (result &lt; length &amp;&amp;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        left[leftOffset + result] == right[rightOffset + result]) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      result++;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    }<a name="line.503"></a>
-<span class="sourceLineNo">504</span><a name="line.504"></a>
-<span class="sourceLineNo">505</span>    return result;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>  }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>  /**<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * Find length of common prefix in two arrays.<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * @param left ByteBuffer to be compared.<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param leftOffset Offset in left ByteBuffer.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * @param leftLength Length of left ByteBuffer.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * @param right ByteBuffer to be compared.<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * @param rightOffset Offset in right ByteBuffer.<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * @param rightLength Length of right ByteBuffer.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   */<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  public static int findCommonPrefix(ByteBuffer left, int leftOffset, int leftLength,<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      ByteBuffer right, int rightOffset, int rightLength) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    int length = Math.min(leftLength, rightLength);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    int result = 0;<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>    while (result &lt; length &amp;&amp; ByteBufferUtils.toByte(left, leftOffset + result) == ByteBufferUtils<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        .toByte(right, rightOffset + result)) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      result++;<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>    return result;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  }<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>   * Check whether two parts in the same buffer are equal.<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * @param buffer In which buffer there are parts<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * @param offsetLeft Beginning of first part.<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   * @param lengthLeft Length of the first part.<a name="line.534"></a>
-<span class="sourceLineNo">535</span>   * @param offsetRight Beginning of the second part.<a name="line.535"></a>
-<span class="sourceLineNo">536</span>   * @param lengthRight Length of the second part.<a name="line.536"></a>
-<span class="sourceLineNo">537</span>   * @return True if equal<a name="line.537"></a>
-<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
-<span class="sourceLineNo">539</span>  public static boolean arePartsEqual(ByteBuffer buffer,<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      int offsetLeft, int lengthLeft,<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      int offsetRight, int lengthRight) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    if (lengthLeft != lengthRight) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      return false;<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>    if (buffer.hasArray()) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      return 0 == Bytes.compareTo(<a name="line.547"></a>
-<span class="sourceLineNo">548</span>          buffer.array(), buffer.arrayOffset() + offsetLeft, lengthLeft,<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          buffer.array(), buffer.arrayOffset() + offsetRight, lengthRight);<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>    for (int i = 0; i &lt; lengthRight; ++i) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      if (buffer.get(offsetLeft + i) != buffer.get(offsetRight + i)) {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>        return false;<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      }<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    return true;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>  /**<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * Increment position in buffer.<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * @param buffer In this buffer.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * @param length By that many bytes.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   */<a name="line.564"></a>
-<span class="sourceLineNo">565</span>  public static void skip(ByteBuffer buffer, int length) {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    buffer.position(buffer.position() + length);<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>  public static void extendLimit(ByteBuffer buffer, int numBytes) {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    buffer.limit(buffer.limit() + numBytes);<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>   * Copy the bytes from position to limit into a new byte[] of the exact length and sets the<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * position and limit back to their original values (though not thread safe).<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * @param buffer copy from here<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   * @param startPosition put buffer.get(startPosition) into byte[0]<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   * @return a new byte[] containing the bytes in the specified range<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   */<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  public static byte[] toBytes(ByteBuffer buffer, int startPosition) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    int originalPosition = buffer.position();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    byte[] output = new byte[buffer.limit() - startPosition];<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    buffer.position(startPosition);<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    buffer.get(output);<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    buffer.position(originalPosition);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    return output;<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  }<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>  /**<a name="line.589"></a>
-<span class="sourceLineNo">590</span>   * Copy the given number of bytes from specified offset into a new byte[]<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   * @param buffer<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * @param offset<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * @param length<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @return a new byte[] containing the bytes in the specified range<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>  public static byte[] toBytes(ByteBuffer buffer, int offset, int length) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    byte[] output = new byte[length];<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    for (int i = 0; i &lt; length; i++) {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      output[i] = buffer.get(offset + i);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    }<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    return output;<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  }<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>  public static boolean equals(ByteBuffer buf1, int o1, int l1, ByteBuffer buf2, int o2, int l2) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    if ((l1 == 0) || (l2 == 0)) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      // both 0 length, return true, or else false<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      return l1 == l2;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    // Since we're often comparing adjacent sorted data,<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    // it's usual to have equal arrays except for the very last byte<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    // so check that first<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    if (toByte(buf1, o1 + l1 - 1) != toByte(buf2, o2 + l2 - 1)) return false;<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    return compareTo(buf1, o1, l1, buf2, o2, l2) == 0;<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>   * @param buf<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   *          ByteBuffer to hash<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   * @param offset<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   *          offset to start from<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * @param length<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   *          length to hash<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   */<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  public static int hashCode(ByteBuffer buf, int offset, int length) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    int hash = 1;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    for (int i = offset; i &lt; offset + length; i++) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      hash = (31 * hash) + (int) toByte(buf, i);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    return hash;<a name="line.629"></a>
-<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
-<span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>  public static int compareTo(ByteBuffer buf1, int o1, int l1, ByteBuffer buf2, int o2, int l2) {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    if (UNSAFE_UNALIGNED) {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      long offset1Adj, offset2Adj;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      Object refObj1 = null, refObj2 = null;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      if (buf1.isDirect()) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        offset1Adj = o1 + ((DirectBuffer) buf1).address();<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      } else {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        offset1Adj = o1 + buf1.arrayOffset() + UnsafeAccess.BYTE_ARRAY_BASE_OFFSET;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        refObj1 = buf1.array();<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      }<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      if (buf2.isDirect()) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        offset2Adj = o2 + ((DirectBuffer) buf2).address();<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      } else {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        offset2Adj = o2 + buf2.arrayOffset() + UnsafeAccess.BYTE_ARRAY_BASE_OFFSET;<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        refObj2 = buf2.array();<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      return compareToUnsafe(refObj1, offset1Adj, l1, refObj2, offset2Adj, l2);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    }<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    int end1 = o1 + l1;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    int end2 = o2 + l2;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    for (int i = o1, j = o2; i &lt; end1 &amp;&amp; j &lt; end2; i++, j++) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      int a = buf1.get(i) &amp; 0xFF;<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      int b = buf2.get(j) &amp; 0xFF;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      if (a != b) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>        return a - b;<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>    return l1 - l2;<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>  public static boolean equals(ByteBuffer buf1, int o1, int l1, byte[] buf2, int o2, int l2) {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    if ((l1 == 0) || (l2 == 0)) {<a name="line.663"></a>
-<span class="sourceLineNo">664</span>      // both 0 length, return true, or else false<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      return l1 == l2;<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    }<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    // Since we're often comparing adjacent sorted data,<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    // it's usual to have equal arrays except for the very last byte<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    // so check that first<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    if (toByte(buf1, o1 + l1 - 1) != buf2[o2 + l2 - 1]) return false;<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    return compareTo(buf1, o1, l1, buf2, o2, l2) == 0;<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>  public static int compareTo(byte [] buf1, int o1, int l1, ByteBuffer buf2, int o2, int l2) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    // This method is nearly same as the compareTo that follows but hard sharing code given<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    // byte array and bytebuffer types and this is a hot code path<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    if (UNSAFE_UNALIGNED) {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      long offset2Adj;<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      Object refObj2 = null;<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      if (buf2.isDirect()) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        offset2Adj = o2 + ((DirectBuffer)buf2).address();<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      } else {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        offset2Adj = o2 + buf2.arrayOffset() + UnsafeAccess.BYTE_ARRAY_BASE_OFFSET;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>        refObj2 = buf2.array();<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      }<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      return compareToUnsafe(buf1, o1 + UnsafeAccess.BYTE_ARRAY_BASE_OFFSET, l1,<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          refObj2, offset2Adj, l2);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>    }<a name="line.688"></a>
-<span class="sourceLineNo">689</span>    int end1 = o1 + l1;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    int end2 = o2 + l2;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    for (int i = o1, j = o2; i &lt; end1 &amp;&amp; j &lt; end2; i++, j++) {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      int a = buf1[i] &amp; 0xFF;<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      int b = buf2.get(j) &amp; 0xFF;<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      if (a != b) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>        return a - b;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      }<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    return l1 - l2;<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>  public static int compareTo(ByteBuffer buf1, int o1, int l1, byte[] buf2, int o2, int l2) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    if (UNSAFE_UNALIGNED) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      long offset1Adj;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      Object refObj1 = null;<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      if (buf1.isDirect()) {<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        offset1Adj = o1 + ((DirectBuffer) buf1).address();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      } else {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>        offset1Adj = o1 + buf1.arrayOffset() + UnsafeAccess.BYTE_ARRAY_BASE_OFFSET;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>        refObj1 = buf1.array();<a name="line.709"></a>
-<span class="sourceLineNo">710</span>      }<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      return compareToUnsafe(refObj1, offset1Adj, l1,<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          buf2, o2 + UnsafeAccess.BYTE_ARRAY_BASE_OFFSET, l2);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    int end1 = o1 + l1;<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    int end2 = o2 + l2;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    for (int i = o1, j = o2; i &lt; end1 &amp;&amp; j &lt; end2; i++, j++) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      int a = buf1.get(i) &amp; 0xFF;<a name="line.717"></a>
-<span class="sourceLineNo">718</span>      int b = buf2[j] &amp; 0xFF;<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      if (a != b) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        return a - b;<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>    return l1 - l2;<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>  static int compareToUnsafe(Object obj1, long o1, int l1, Object obj2, long o2, int l2) {<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    final int stride = 8;<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    final int minLength = Math.min(l1, l2);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    int strideLimit = minLength &amp; ~(stride - 1);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    int i;<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>     * Compare 8 bytes at a time. Benchmarking shows comparing 8 bytes at a time is no slower than<a name="line.733"></a>
-<span class="sourceLineNo">734</span>     * comparing 4 bytes at a time even on 32-bit. On the other hand, it is substantially faster on<a name="line.734"></a>
-<span class="sourceLineNo">735</span>     * 64-bit.<a name="line.735"></a>
-<span class="sourceLineNo">736</span>     */<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    for (i = 0; i &lt; strideLimit; i += stride) {<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      long lw = UnsafeAccess.theUnsafe.getLong(obj1, o1 + (long) i);<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      long rw = UnsafeAccess.theUnsafe.getLong(obj2, o2 + (long) i);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      if (lw != rw) {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        if (!UnsafeAccess.littleEndian) {<a name="line.741"></a>
-<span class="sourceLineNo">742</span>          return ((lw + Long.MIN_VALUE) &lt; (rw + Long.MIN_VALUE)) ? -1 : 1;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>        }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span>        /*<a name="line.745"></a>
-<span class="sourceLineNo">746</span>         * We want to compare only the first index where left[index] != right[index]. This<a name="line.746"></a>
-<span class="sourceLineNo">747</span>         * corresponds to the least significant nonzero byte in lw ^ rw, since lw and rw are<a name="line.747"></a>
-<span class="sourceLineNo">748</span>         * little-endian. Long.numberOfTrailingZeros(diff) tells us the least significant<a name="line.748"></a>
-<span class="sourceLineNo">749</span>         * nonzero bit, and zeroing out the first three bits of L.nTZ gives us the shift to get<a name="line.749"></a>
-<span class="sourceLineNo">750</span>         * that least significant nonzero byte. This comparison logic is based on UnsignedBytes<a name="line.750"></a>
-<span class="sourceLineNo">751</span>         * from guava v21<a name="line.751"></a>
-<span class="sourceLineNo">752</span>         */<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        int n = Long.numberOfTrailingZeros(lw ^ rw) &amp; ~0x7;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>        return ((int) ((lw &gt;&gt;&gt; n) &amp; 0xFF)) - ((int) ((rw &gt;&gt;&gt; n) &amp; 0xFF));<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><a name="line.757"></a>
-<span class="sourceLineNo">758</span>    // The epilogue to cover the last (minLength % stride) elements.<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    for (; i &lt; minLength; i++) {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      int il = (UnsafeAccess.theUnsafe.getByte(obj1, o1 + i) &amp; 0xFF);<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      int ir = (UnsafeAccess.theUnsafe.getByte(obj2, o2 + i) &amp; 0xFF);<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      if (il != ir) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>        return il - ir;<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      }<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    return l1 - l2;<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  }<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>   * Reads a short value at the given buffer's offset.<a name="line.770"></a>
-<span class="sourceLineNo">771</span>   * @param buffer<a name="line.771"></a>
-<span class="sourceLineNo">772</span>   * @param offset<a name="line.772"></a>
-<span class="sourceLineNo">773</span>   * @return short value at offset<a name="line.773"></a>
-<span class="sourceLineNo">774</span>   */<a name="line.774"></a>
-<span class="sourceLineNo">775</span>  public static short toShort(ByteBuffer buffer, int offset) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    if (UNSAFE_UNALIGNED) {<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      return UnsafeAccess.toShort(buffer, offset);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    } else {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      return buffer.getShort(offset);<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>  /**<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   * Reads an int value at the given buffer's current position. Also advances the buffer's position<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   */<a name="line.785"></a>
-<span class="sourceLineNo">786</span>  public static int toInt(ByteBuffer buffer) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>    if (UNSAFE_UNALIGNED) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      int i = UnsafeAccess.toInt(buffer, buffer.position());<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      buffer.position(buffer.position() + Bytes.SIZEOF_INT);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      return i;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    } else {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      return buffer.getInt();<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    }<a name="line.793"></a>
-<span class="sourceLineNo">794</span>  }<a name="line.794"></a>
-<span class="sourceLineNo">795</span><a name="line.795"></a>
-<span class="sourceLineNo">796</span>  /**<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * Reads an int value at the given buffer's offset.<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * @param buffer<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * @param offset<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   * @return int value at offset<a name="line.800"></a>
-<span class="sourceLineNo">801</span>   */<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  public static int toInt(ByteBuffer buffer, int offset) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    if (UNSAFE_UNALIGNED) {<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      return UnsafeAccess.toInt(buffer, offset);<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    } else {<a name="line.805"></a>
-<span class="sourceLineNo">806</span>      return buffer.getInt(offset);<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>  /**<a name="line.810"></a>
-<span class="sourceLineNo">811</span>   * Converts a ByteBuffer to an int value<a name="line.811"></a>
-<span class="sourceLineNo">812</span>   *<a name="line.812"></a>
-<span class="sourceLineNo">813</span>   * @param buf The ByteBuffer<a name="line.813"></a>
-<span class="sourceLineNo">814</span>   * @param offset Offset to int value<a name="line.814"></a>
-<span class="sourceLineNo">815</span>   * @param length Number of bytes used to store the int value.<a name="line.815"></a>
-<span class="sourceLineNo">816</span>   * @return the int value<a name="line.816"></a>
-<span class="sourceLineNo">817</span>   * @throws IllegalArgumentException<a name="line.817"></a>
-<span class="sourceLineNo">818</span>   *           if there's not enough bytes left in the buffer after the given offset<a name="line.818"></a>
-<span class="sourceLineNo">819</span>   */<a name="line.819"></a>
-<span class="sourceLineNo">820</span>  public static int readAsInt(ByteBuffer buf, int offset, final int length) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    if (offset + length &gt; buf.limit()) {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>      throw new IllegalArgumentException("offset (" + offset + ") + length (" + length<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          + ") exceed the" + " limit of the buffer: " + buf.limit());<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    }<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    int n = 0;<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    for(int i = offset; i &lt; (offset + length); i++) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>      n &lt;&lt;= 8;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      n ^= toByte(buf, i) &amp; 0xFF;<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    return n;<a name="line.830"></a>
-<span class="sourceLineNo">831</span>  }<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>  /**<a name="line.833"></a>
-<span class="sourceLineNo">834</span>   * Reads a long value at the given buffer's offset.<a name="line.834"></a>
-<span class="sourceLineNo">835</span>   * @param buffer<a name="line.835"></a>
-<span class="sourceLineNo">836</span>   * @param offset<a name="line.836"></a>
-<span class="sourceLineNo">837</span>   * @return long value at offset<a name="line.837"></a>
-<span class="sourceLineNo">838</span>   */<a name="line.838"></a>
-<span class="sourceLineNo">839</span>  public static long toLong(ByteBuffer buffer, int offset) {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    if (UNSAFE_UNALIGNED) {<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      return UnsafeAccess.toLong(buffer, offset);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    } else {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      return buffer.getLong(offset);<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>   * Put an int value out to the given ByteBuffer's current position in big-endian format.<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * This also advances the position in buffer by int size.<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   * @param buffer the ByteBuffer to write to<a name="line.850"></a>
-<span class="sourceLineNo">851</span>   * @param val int to write out<a name="line.851"></a>
-<span class="sourceLineNo">852</span>   */<a name="line.852"></a>
-<span class="sourceLineNo">853</span>  public static void putInt(ByteBuffer buffer, int val) {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>    if (UNSAFE_UNALIGNED) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>      int newPos = UnsafeAccess.putInt(buffer, buffer.position(), val);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>      buffer.position(newPos);<a name="line.856"></a>
-<span class="sourceLineNo">857</span>    } else {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>      buffer.putInt(val);<a name="line.858"></a>
-<span class="sourceLineNo">859</span>    }<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>  public static int putInt(ByteBuffer buffer, int index, int val) {<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    if (UNSAFE_UNALIGNED) {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>      return UnsafeAccess.putInt(buffer, index, val);<a name="line.864"></a>
-<span class="sourceLineNo">865</span>    }<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    buffer.putInt(index, val);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    return index + Bytes.SIZEOF_INT;<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>  /**<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * Reads a double value at the given buffer's offset.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   * @param buffer<a name="line.872"></a>
-<span class="sourceLineNo">873</span>   * @param offset offset where double is<a name="line.873"></a>
-<span class="sourceLineNo">874</span>   * @return double value at offset<a name="line.874"></a>
-<span class="sourceLineNo">875</span>   */<a name="line.875"></a>
-<span class="sourceLineNo">876</span>  public static double toDouble(ByteBuffer buffer, int offset) {<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    return Double.longBitsToDouble(toLong(buffer, offset));<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>  /**<a name="line.880"></a>
-<span class="sourceLineNo">881</span>   * Reads a BigDecimal value at the given buffer's offset.<a name="line.881"></a>
-<span class="sourceLineNo">882</span>   * @param buffer<a name="line.882"></a>
-<span class="sourceLineNo">883</span>   * @param offset<a name="line.883"></a>
-<span class="sourceLineNo">884</span>   * @return BigDecimal value at offset<a name="line.884"></a>
-<span class="sourceLineNo">885</span>   */<a name="line.885"></a>
-<span class="sourceLineNo">886</span>  public static BigDecimal toBigDecimal(ByteBuffer buffer, int offset, int length) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    if (buffer == null || length &lt; Bytes.SIZEOF_INT + 1 ||<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      (offset + length &gt; buffer.limit())) {<a name="line.888"></a>
-<span class="sourceLineNo">889</span>      return null;<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>    int scale = toInt(buffer, offset);<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    byte[] tcBytes = new byte[length - Bytes.SIZEOF_INT];<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    copyFromBufferToArray(tcBytes, buffer, offset + Bytes.SIZEOF_INT, 0, length - Bytes.SIZEOF_INT);<a name="line.894"></a>
-<span class="sourceLineNo">895</span>    return new BigDecimal(new BigInteger(tcBytes), scale);<a name="line.895"></a>
-<span class="sourceLineNo">896</span>  }<a name="line.896"></a>
-<span class="sourceLineNo">897</span><a name="line.897"></a>
-<span class="sourceLineNo">898</span>  /**<a name="line.898"></a>
-<span class="sourceLineNo">899</span>   * Put a short value out to the given ByteBuffer's current position in big-endian format.<a name="line.899"></a>
-<span class="sourceLineNo">900</span>   * This also advances the position in buffer by short size.<a name="line.900"></a>
-<span class="sourceLineNo">901</span>   * @param buffer the ByteBuffer to write to<a name="line.901"></a>
-<span class="sourceLineNo">902</span>   * @param val short to write out<a name="line.902"></a>
-<span class="sourceLineNo">903</span>   */<a name="line.903"></a>
-<span class="sourceLineNo">904</span>  public static void putShort(ByteBuffer buffer, short val) {<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    if (UNSAFE_UNALIGNED) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      int newPos = UnsafeAccess.putShort(buffer, buffer.position(), val);<a name="line.906"></a>
-<span class="sourceLineNo">907</span>      buffer.position(newPos);<a name="line.907"></a>
-<span class="sourceLineNo">908</span>    } else {<a name="line.908"></a>
-<span class="sourceLineNo">909</span>      buffer.putShort(val);<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><a name="line.912"></a>
-<span class="sourceLineNo">913</span>  public static int putShort(ByteBuffer buffer, int index, short val) {<a name="line.913"></a>
-<span class="sourceLineNo">914</span>    if (UNSAFE_UNALIGNED) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>      return UnsafeAccess.putShort(buffer, index, val);<a name="line.915"></a>
-<span class="sourceLineNo">916</span>    }<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    buffer.putShort(index, val);<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    return index + Bytes.SIZEOF_SHORT;<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 int putAsShort(ByteBuffer buf, int index, int val) {<a name="line.921"></a>
-<span class="sourceLineNo">922</span>    buf.put(index + 1, (byte) val);<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    val &gt;&gt;= 8;<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    buf.put(index, (byte) val);<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    return index + Bytes.SIZEOF_SHORT;<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>  /**<a name="line.928"></a>
-<span class="sourceLineNo">929</span>   * Put a long value out to the given ByteBuffer's current position in big-endian format.<a name="line.929"></a>
-<span class="sourceLineNo">930</span>   * This also advances the position in buffer by long size.<a name="line.930"></a>
-<span class="sourceLineNo">931</span>   * @param buffer the ByteBuffer to write to<a name="line.931"></a>
-<span class="sourceLineNo">932</span>   * @param val long to write out<a name="line.932"></a>
-<span class="sourceLineNo">933</span>   */<a name="line.933"></a>
-<span class="sourceLineNo">934</span>  public static void putLong(ByteBuffer buffer, long val) {<a name="line.934"></a>
-<span class="sourceLineNo">935</span>    if (UNSAFE_UNALIGNED) {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      int newPos = UnsafeAccess.putLong(buffer, buffer.position(), val);<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      buffer.position(newPos);<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    } else {<a name="line.938"></a>
-<span class="sourceLineNo">939</span>      buffer.putLong(val);<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    }<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>  public static int putLong(ByteBuffer buffer, int index, long val) {<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    if (UNSAFE_UNALIGNED) {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>      return UnsafeAccess.putLong(buffer, index, val);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    }<a name="line.946"></a>
-<span class="sourceLineNo">947</span>    buffer.putLong(index, val);<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    return index + Bytes.SIZEOF_LONG;<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  }<a name="line.949"></a>
-<span class="sourceLineNo">950</span><a name="line.950"></a>
-<span class="sourceLineNo">951</span>  /**<a name="line.951"></a>
-<span class="sourceLineNo">952</span>   * Copies the bytes from given array's offset to length part into the given buffer. Puts the bytes<a name="line.952"></a>
-<span class="sourceLineNo">953</span>   * to buffer's current position. This also advances the position in the 'out' buffer by 'length'<a name="line.953"></a>
-<span class="sourceLineNo">954</span>   * @pa

<TRUNCATED>

[06/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.html
index 28539e5..c3f794b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.html
@@ -55,404 +55,406 @@
 <span class="sourceLineNo">047</span> * implementations:<a name="line.47"></a>
 <span class="sourceLineNo">048</span> * &lt;ul&gt;<a name="line.48"></a>
 <span class="sourceLineNo">049</span> *   &lt;li&gt;&lt;em&gt;defaultProvider&lt;/em&gt; : whatever provider is standard for the hbase version. Currently<a name="line.49"></a>
-<span class="sourceLineNo">050</span> *                                  "filesystem"&lt;/li&gt;<a name="line.50"></a>
-<span class="sourceLineNo">051</span> *   &lt;li&gt;&lt;em&gt;filesystem&lt;/em&gt; : a provider that will run on top of an implementation of the Hadoop<a name="line.51"></a>
-<span class="sourceLineNo">052</span> *                             FileSystem interface, normally HDFS.&lt;/li&gt;<a name="line.52"></a>
-<span class="sourceLineNo">053</span> *   &lt;li&gt;&lt;em&gt;multiwal&lt;/em&gt; : a provider that will use multiple "filesystem" wal instances per region<a name="line.53"></a>
-<span class="sourceLineNo">054</span> *                           server.&lt;/li&gt;<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * &lt;/ul&gt;<a name="line.55"></a>
-<span class="sourceLineNo">056</span> *<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * Alternatively, you may provide a custom implementation of {@link WALProvider} by class name.<a name="line.57"></a>
-<span class="sourceLineNo">058</span> */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>@InterfaceAudience.Private<a name="line.59"></a>
-<span class="sourceLineNo">060</span>public class WALFactory {<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private static final Logger LOG = LoggerFactory.getLogger(WALFactory.class);<a name="line.62"></a>
+<span class="sourceLineNo">050</span> *                                  "asyncfs"&lt;/li&gt;<a name="line.50"></a>
+<span class="sourceLineNo">051</span> *   &lt;li&gt;&lt;em&gt;asyncfs&lt;/em&gt; : a provider that will run on top of an implementation of the Hadoop<a name="line.51"></a>
+<span class="sourceLineNo">052</span> *                             FileSystem interface via an asynchronous client.&lt;/li&gt;<a name="line.52"></a>
+<span class="sourceLineNo">053</span> *   &lt;li&gt;&lt;em&gt;filesystem&lt;/em&gt; : a provider that will run on top of an implementation of the Hadoop<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *                             FileSystem interface via HDFS's synchronous DFSClient.&lt;/li&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> *   &lt;li&gt;&lt;em&gt;multiwal&lt;/em&gt; : a provider that will use multiple "filesystem" wal instances per region<a name="line.55"></a>
+<span class="sourceLineNo">056</span> *                           server.&lt;/li&gt;<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;/ul&gt;<a name="line.57"></a>
+<span class="sourceLineNo">058</span> *<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * Alternatively, you may provide a custom implementation of {@link WALProvider} by class name.<a name="line.59"></a>
+<span class="sourceLineNo">060</span> */<a name="line.60"></a>
+<span class="sourceLineNo">061</span>@InterfaceAudience.Private<a name="line.61"></a>
+<span class="sourceLineNo">062</span>public class WALFactory {<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>   * Maps between configuration names for providers and implementation classes.<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   */<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  static enum Providers {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    defaultProvider(AsyncFSWALProvider.class),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    filesystem(FSHLogProvider.class),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    multiwal(RegionGroupingProvider.class),<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    asyncfs(AsyncFSWALProvider.class);<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>    final Class&lt;? extends WALProvider&gt; clazz;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    Providers(Class&lt;? extends WALProvider&gt; clazz) {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      this.clazz = clazz;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    }<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public static final String WAL_PROVIDER = "hbase.wal.provider";<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  static final String DEFAULT_WAL_PROVIDER = Providers.defaultProvider.name();<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public static final String META_WAL_PROVIDER = "hbase.wal.meta_provider";<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  static final String DEFAULT_META_WAL_PROVIDER = Providers.defaultProvider.name();<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  final String factoryId;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  private final WALProvider provider;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  // The meta updates are written to a different wal. If this<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  // regionserver holds meta regions, then this ref will be non-null.<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  // lazily intialized; most RegionServers don't deal with META<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private final AtomicReference&lt;WALProvider&gt; metaProvider = new AtomicReference&lt;&gt;();<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>   * Configuration-specified WAL Reader used when a custom reader is requested<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private final Class&lt;? extends AbstractFSWALProvider.Reader&gt; logReaderClass;<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>   * How long to attempt opening in-recovery wals<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  private final int timeoutMillis;<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private final Configuration conf;<a name="line.102"></a>
+<span class="sourceLineNo">064</span>  private static final Logger LOG = LoggerFactory.getLogger(WALFactory.class);<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  /**<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   * Maps between configuration names for providers and implementation classes.<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  static enum Providers {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    defaultProvider(AsyncFSWALProvider.class),<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    filesystem(FSHLogProvider.class),<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    multiwal(RegionGroupingProvider.class),<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    asyncfs(AsyncFSWALProvider.class);<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>    final Class&lt;? extends WALProvider&gt; clazz;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    Providers(Class&lt;? extends WALProvider&gt; clazz) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      this.clazz = clazz;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    }<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public static final String WAL_PROVIDER = "hbase.wal.provider";<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  static final String DEFAULT_WAL_PROVIDER = Providers.defaultProvider.name();<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static final String META_WAL_PROVIDER = "hbase.wal.meta_provider";<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  static final String DEFAULT_META_WAL_PROVIDER = Providers.defaultProvider.name();<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>  final String factoryId;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final WALProvider provider;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  // The meta updates are written to a different wal. If this<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  // regionserver holds meta regions, then this ref will be non-null.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  // lazily intialized; most RegionServers don't deal with META<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private final AtomicReference&lt;WALProvider&gt; metaProvider = new AtomicReference&lt;&gt;();<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>   * Configuration-specified WAL Reader used when a custom reader is requested<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  private final Class&lt;? extends AbstractFSWALProvider.Reader&gt; logReaderClass;<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>   * How long to attempt opening in-recovery wals<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   */<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private final int timeoutMillis;<a name="line.102"></a>
 <span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // Used for the singleton WALFactory, see below.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  private WALFactory(Configuration conf) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    // this code is duplicated here so we can keep our members final.<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    // until we've moved reader/writer construction down into providers, this initialization must<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    // happen prior to provider initialization, in case they need to instantiate a reader/writer.<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    timeoutMillis = conf.getInt("hbase.hlog.open.timeout", 300000);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    /* TODO Both of these are probably specific to the fs wal provider */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    logReaderClass = conf.getClass("hbase.regionserver.hlog.reader.impl", ProtobufLogReader.class,<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      AbstractFSWALProvider.Reader.class);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    this.conf = conf;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // end required early initialization<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>    // this instance can't create wals, just reader/writers.<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    provider = null;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    factoryId = SINGLETON_ID;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  @VisibleForTesting<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public Class&lt;? extends WALProvider&gt; getProviderClass(String key, String defaultValue) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    try {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      return Providers.valueOf(conf.get(key, defaultValue)).clazz;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    } catch (IllegalArgumentException exception) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // Fall back to them specifying a class name<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      // Note that the passed default class shouldn't actually be used, since the above only fails<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      // when there is a config value present.<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      return conf.getClass(key, Providers.defaultProvider.clazz, WALProvider.class);<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>  WALProvider createProvider(Class&lt;? extends WALProvider&gt; clazz, String providerId)<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      throws IOException {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    LOG.info("Instantiating WALProvider of type " + clazz);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    try {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      final WALProvider result = clazz.getDeclaredConstructor().newInstance();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      result.init(this, conf, providerId);<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      return result;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    } catch (Exception e) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      LOG.error("couldn't set up WALProvider, the configured class is " + clazz);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      LOG.debug("Exception details for failure to load WALProvider.", e);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      throw new IOException("couldn't set up WALProvider", e);<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><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  /**<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * instantiate a provider from a config property. requires conf to have already been set (as well<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * as anything the provider might need to read).<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  WALProvider getProvider(String key, String defaultValue, String providerId) throws IOException {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    Class&lt;? extends WALProvider&gt; clazz = getProviderClass(key, defaultValue);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    WALProvider provider = createProvider(clazz, providerId);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    provider.addWALActionsListener(new MetricsWAL());<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    return provider;<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>  /**<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @param conf must not be null, will keep a reference to read params in later reader/writer<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   *          instances.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * @param factoryId a unique identifier for this factory. used i.e. by filesystem implementations<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   *          to make a directory<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   */<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  public WALFactory(Configuration conf, String factoryId) throws IOException {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    // until we've moved reader/writer construction down into providers, this initialization must<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    // happen prior to provider initialization, in case they need to instantiate a reader/writer.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    timeoutMillis = conf.getInt("hbase.hlog.open.timeout", 300000);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    /* TODO Both of these are probably specific to the fs wal provider */<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    logReaderClass = conf.getClass("hbase.regionserver.hlog.reader.impl", ProtobufLogReader.class,<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      AbstractFSWALProvider.Reader.class);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    this.conf = conf;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    this.factoryId = factoryId;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    // end required early initialization<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    if (conf.getBoolean("hbase.regionserver.hlog.enabled", true)) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      provider = getProvider(WAL_PROVIDER, DEFAULT_WAL_PROVIDER, null);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    } else {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      // special handling of existing configuration behavior.<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      LOG.warn("Running with WAL disabled.");<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      provider = new DisabledWALProvider();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      provider.init(this, conf, factoryId);<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><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  /**<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * Shutdown all WALs and clean up any underlying storage.<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * Use only when you will not need to replay and edits that have gone to any wals from this<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * factory.<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   */<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  public void close() throws IOException {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    final WALProvider metaProvider = this.metaProvider.get();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    if (null != metaProvider) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      metaProvider.close();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    // close is called on a WALFactory with null provider in the case of contention handling<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    // within the getInstance method.<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    if (null != provider) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      provider.close();<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    }<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>  /**<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * Tell the underlying WAL providers to shut down, but do not clean up underlying storage.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * If you are not ending cleanly and will need to replay edits from this factory's wals,<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * use this method if you can as it will try to leave things as tidy as possible.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   */<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  public void shutdown() throws IOException {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    IOException exception = null;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    final WALProvider metaProvider = this.metaProvider.get();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    if (null != metaProvider) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      try {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        metaProvider.shutdown();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      } catch(IOException ioe) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        exception = ioe;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    provider.shutdown();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    if (null != exception) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      throw exception;<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><a name="line.221"></a>
-<span class="sourceLineNo">222</span>  public List&lt;WAL&gt; getWALs() {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    return provider.getWALs();<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>  private WALProvider getMetaProvider() throws IOException {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    for (;;) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      WALProvider provider = this.metaProvider.get();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      if (provider != null) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        return provider;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      }<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      provider = getProvider(META_WAL_PROVIDER, DEFAULT_META_WAL_PROVIDER,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        AbstractFSWALProvider.META_WAL_PROVIDER_ID);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      if (metaProvider.compareAndSet(null, provider)) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        return provider;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      } else {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        // someone is ahead of us, close and try again.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        provider.close();<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>  }<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * @param region the region which we want to get a WAL for it. Could be null.<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  public WAL getWAL(RegionInfo region) throws IOException {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // use different WAL for hbase:meta<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (region != null &amp;&amp; region.isMetaRegion() &amp;&amp;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      region.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      return getMetaProvider().getWAL(region);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    } else {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      return provider.getWAL(region);<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>  public Reader createReader(final FileSystem fs, final Path path) throws IOException {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    return createReader(fs, path, (CancelableProgressable)null);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  }<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>   * Create a reader for the WAL. If you are reading from a file that's being written to and need<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * to reopen it multiple times, use {@link WAL.Reader#reset()} instead of this method<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * then just seek back to the last known good position.<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   * @return A WAL reader.  Close when done with it.<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   * @throws IOException<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   */<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  public Reader createReader(final FileSystem fs, final Path path,<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      CancelableProgressable reporter) throws IOException {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    return createReader(fs, path, reporter, true);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  public Reader createReader(final FileSystem fs, final Path path, CancelableProgressable reporter,<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      boolean allowCustom) throws IOException {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    Class&lt;? extends AbstractFSWALProvider.Reader&gt; lrClass =<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        allowCustom ? logReaderClass : ProtobufLogReader.class;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    try {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      // A wal file could be under recovery, so it may take several<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      // tries to get it open. Instead of claiming it is corrupted, retry<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      // to open it up to 5 minutes by default.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      long startWaiting = EnvironmentEdgeManager.currentTime();<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      long openTimeout = timeoutMillis + startWaiting;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      int nbAttempt = 0;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      AbstractFSWALProvider.Reader reader = null;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      while (true) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        try {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          reader = lrClass.getDeclaredConstructor().newInstance();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>          reader.init(fs, path, conf, null);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>          return reader;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        } catch (IOException e) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>          if (reader != null) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>            try {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>              reader.close();<a name="line.292"></a>
-<span class="sourceLineNo">293</span>            } catch (IOException exception) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>              LOG.warn("Could not close FSDataInputStream" + exception.getMessage());<a name="line.294"></a>
-<span class="sourceLineNo">295</span>              LOG.debug("exception details", exception);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>            }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          }<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>          String msg = e.getMessage();<a name="line.299"></a>
-<span class="sourceLineNo">300</span>          if (msg != null<a name="line.300"></a>
-<span class="sourceLineNo">301</span>              &amp;&amp; (msg.contains("Cannot obtain block length")<a name="line.301"></a>
-<span class="sourceLineNo">302</span>                  || msg.contains("Could not obtain the last block") || msg<a name="line.302"></a>
-<span class="sourceLineNo">303</span>                    .matches("Blocklist for [^ ]* has changed.*"))) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>            if (++nbAttempt == 1) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>              LOG.warn("Lease should have recovered. This is not expected. Will retry", e);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>            }<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>              throw new InterruptedIOException("Operation is cancelled");<a name="line.308"></a>
-<span class="sourceLineNo">309</span>            }<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            if (nbAttempt &gt; 2 &amp;&amp; openTimeout &lt; EnvironmentEdgeManager.currentTime()) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>              LOG.error("Can't open after " + nbAttempt + " attempts and "<a name="line.311"></a>
-<span class="sourceLineNo">312</span>                  + (EnvironmentEdgeManager.currentTime() - startWaiting) + "ms " + " for " + path);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>            } else {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>              try {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>                Thread.sleep(nbAttempt &lt; 3 ? 500 : 1000);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>                continue; // retry<a name="line.316"></a>
-<span class="sourceLineNo">317</span>              } catch (InterruptedException ie) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>                InterruptedIOException iioe = new InterruptedIOException();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>                iioe.initCause(ie);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>                throw iioe;<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>            throw new LeaseNotRecoveredException(e);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>          } else {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>            throw e;<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>      }<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    } catch (IOException ie) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      throw ie;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    } catch (Exception e) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      throw new IOException("Cannot get log reader", e);<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>  /**<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   * Create a writer for the WAL.<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   * Uses defaults.<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * &lt;p&gt;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * Should be package-private. public only for tests and<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * {@link org.apache.hadoop.hbase.regionserver.wal.Compressor}<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * @return A WAL writer. Close when done with it.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   */<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  public Writer createWALWriter(final FileSystem fs, final Path path) throws IOException {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    return FSHLogProvider.createWriter(conf, fs, path, false);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  /**<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * Should be package-private, visible for recovery testing.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * Uses defaults.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @return an overwritable writer for recovered edits. caller should close.<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   */<a name="line.352"></a>
-<span class="sourceLineNo">353</span>  @VisibleForTesting<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  public Writer createRecoveredEditsWriter(final FileSystem fs, final Path path)<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      throws IOException {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    return FSHLogProvider.createWriter(conf, fs, path, true);<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>  // These static methods are currently used where it's impractical to<a name="line.359"></a>
-<span class="sourceLineNo">360</span>  // untangle the reliance on state in the filesystem. They rely on singleton<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  // WALFactory that just provides Reader / Writers.<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  // For now, first Configuration object wins. Practically this just impacts the reader/writer class<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  private static final AtomicReference&lt;WALFactory&gt; singleton = new AtomicReference&lt;&gt;();<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  private static final String SINGLETON_ID = WALFactory.class.getName();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  <a name="line.365"></a>
-<span class="sourceLineNo">366</span>  // Public only for FSHLog<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  public static WALFactory getInstance(Configuration configuration) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    WALFactory factory = singleton.get();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    if (null == factory) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      WALFactory temp = new WALFactory(configuration);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      if (singleton.compareAndSet(null, temp)) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        factory = temp;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      } else {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        // someone else beat us to initializing<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        try {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          temp.close();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        } catch (IOException exception) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          LOG.debug("failed to close temporary singleton. ignoring.", exception);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        factory = singleton.get();<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>    return factory;<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>   * Create a reader for the given path, accept custom reader classes from conf.<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @return a WAL Reader, caller must close.<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  public static Reader createReader(final FileSystem fs, final Path path,<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      final Configuration configuration) throws IOException {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    return getInstance(configuration).createReader(fs, path);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
-<span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span>  /**<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * Create a reader for the given path, accept custom reader classes from conf.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * @return a WAL Reader, caller must close.<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   */<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  static Reader createReader(final FileSystem fs, final Path path,<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      final Configuration configuration, final CancelableProgressable reporter) throws IOException {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    return getInstance(configuration).createReader(fs, path, reporter);<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>  /**<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   * Create a reader for the given path, ignore custom reader classes from conf.<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   * only public pending move of {@link org.apache.hadoop.hbase.regionserver.wal.Compressor}<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   * @return a WAL Reader, caller must close.<a name="line.410"></a>
-<span class="sourceLineNo">411</span>   */<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  public static Reader createReaderIgnoreCustomClass(final FileSystem fs, final Path path,<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      final Configuration configuration) throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    return getInstance(configuration).createReader(fs, path, null, false);<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>   * If you already have a WALFactory, you should favor the instance method.<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * Uses defaults.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * @return a Writer that will overwrite files. Caller must close.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   */<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  static Writer createRecoveredEditsWriter(final FileSystem fs, final Path path,<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      final Configuration configuration)<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      throws IOException {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    return FSHLogProvider.createWriter(configuration, fs, path, true);<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>  /**<a name="line.428"></a>
-<span class="sourceLineNo">429</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   * Uses defaults.<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   * @return a writer that won't overwrite files. Caller must close.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   */<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  @VisibleForTesting<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  public static Writer createWALWriter(final FileSystem fs, final Path path,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      final Configuration configuration)<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      throws IOException {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    return FSHLogProvider.createWriter(configuration, fs, path, false);<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>  public final WALProvider getWALProvider() {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    return this.provider;<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>  public final WALProvider getMetaWALProvider() {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    return this.metaProvider.get();<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">104</span>  private final Configuration conf;<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  // Used for the singleton WALFactory, see below.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  private WALFactory(Configuration conf) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    // this code is duplicated here so we can keep our members final.<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    // until we've moved reader/writer construction down into providers, this initialization must<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    // happen prior to provider initialization, in case they need to instantiate a reader/writer.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    timeoutMillis = conf.getInt("hbase.hlog.open.timeout", 300000);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    /* TODO Both of these are probably specific to the fs wal provider */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    logReaderClass = conf.getClass("hbase.regionserver.hlog.reader.impl", ProtobufLogReader.class,<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      AbstractFSWALProvider.Reader.class);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    this.conf = conf;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    // end required early initialization<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>    // this instance can't create wals, just reader/writers.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    provider = null;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    factoryId = SINGLETON_ID;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  @VisibleForTesting<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public Class&lt;? extends WALProvider&gt; getProviderClass(String key, String defaultValue) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    try {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      return Providers.valueOf(conf.get(key, defaultValue)).clazz;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    } catch (IllegalArgumentException exception) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      // Fall back to them specifying a class name<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      // Note that the passed default class shouldn't actually be used, since the above only fails<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      // when there is a config value present.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      return conf.getClass(key, Providers.defaultProvider.clazz, WALProvider.class);<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><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  WALProvider createProvider(Class&lt;? extends WALProvider&gt; clazz, String providerId)<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      throws IOException {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    LOG.info("Instantiating WALProvider of type " + clazz);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    try {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      final WALProvider result = clazz.getDeclaredConstructor().newInstance();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      result.init(this, conf, providerId);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      return result;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    } catch (Exception e) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      LOG.error("couldn't set up WALProvider, the configured class is " + clazz);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      LOG.debug("Exception details for failure to load WALProvider.", e);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      throw new IOException("couldn't set up WALProvider", e);<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><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  /**<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * instantiate a provider from a config property. requires conf to have already been set (as well<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * as anything the provider might need to read).<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  WALProvider getProvider(String key, String defaultValue, String providerId) throws IOException {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    Class&lt;? extends WALProvider&gt; clazz = getProviderClass(key, defaultValue);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    WALProvider provider = createProvider(clazz, providerId);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    provider.addWALActionsListener(new MetricsWAL());<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    return provider;<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>   * @param conf must not be null, will keep a reference to read params in later reader/writer<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   *          instances.<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * @param factoryId a unique identifier for this factory. used i.e. by filesystem implementations<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   *          to make a directory<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   */<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  public WALFactory(Configuration conf, String factoryId) throws IOException {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    // until we've moved reader/writer construction down into providers, this initialization must<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    // happen prior to provider initialization, in case they need to instantiate a reader/writer.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    timeoutMillis = conf.getInt("hbase.hlog.open.timeout", 300000);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    /* TODO Both of these are probably specific to the fs wal provider */<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    logReaderClass = conf.getClass("hbase.regionserver.hlog.reader.impl", ProtobufLogReader.class,<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      AbstractFSWALProvider.Reader.class);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    this.conf = conf;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    this.factoryId = factoryId;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    // end required early initialization<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    if (conf.getBoolean("hbase.regionserver.hlog.enabled", true)) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      provider = getProvider(WAL_PROVIDER, DEFAULT_WAL_PROVIDER, null);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    } else {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      // special handling of existing configuration behavior.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      LOG.warn("Running with WAL disabled.");<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      provider = new DisabledWALProvider();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      provider.init(this, conf, factoryId);<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><a name="line.185"></a>
+<span class="sourceLineNo">186</span>  /**<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   * Shutdown all WALs and clean up any underlying storage.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   * Use only when you will not need to replay and edits that have gone to any wals from this<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * factory.<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   */<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  public void close() throws IOException {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    final WALProvider metaProvider = this.metaProvider.get();<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    if (null != metaProvider) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      metaProvider.close();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // close is called on a WALFactory with null provider in the case of contention handling<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    // within the getInstance method.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    if (null != provider) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      provider.close();<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><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  /**<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   * Tell the underlying WAL providers to shut down, but do not clean up underlying storage.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   * If you are not ending cleanly and will need to replay edits from this factory's wals,<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   * use this method if you can as it will try to leave things as tidy as possible.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   */<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  public void shutdown() throws IOException {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    IOException exception = null;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    final WALProvider metaProvider = this.metaProvider.get();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    if (null != metaProvider) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      try {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        metaProvider.shutdown();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      } catch(IOException ioe) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        exception = ioe;<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>    provider.shutdown();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    if (null != exception) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      throw exception;<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><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  public List&lt;WAL&gt; getWALs() {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    return provider.getWALs();<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>  private WALProvider getMetaProvider() throws IOException {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    for (;;) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      WALProvider provider = this.metaProvider.get();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      if (provider != null) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        return provider;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      }<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      provider = getProvider(META_WAL_PROVIDER, DEFAULT_META_WAL_PROVIDER,<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        AbstractFSWALProvider.META_WAL_PROVIDER_ID);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      if (metaProvider.compareAndSet(null, provider)) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        return provider;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      } else {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        // someone is ahead of us, close and try again.<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        provider.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>  }<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>   * @param region the region which we want to get a WAL for it. Could be null.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   */<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  public WAL getWAL(RegionInfo region) throws IOException {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    // use different WAL for hbase:meta<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    if (region != null &amp;&amp; region.isMetaRegion() &amp;&amp;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      region.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      return getMetaProvider().getWAL(region);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    } else {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      return provider.getWAL(region);<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><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  public Reader createReader(final FileSystem fs, final Path path) throws IOException {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    return createReader(fs, path, (CancelableProgressable)null);<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>  /**<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * Create a reader for the WAL. If you are reading from a file that's being written to and need<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * to reopen it multiple times, use {@link WAL.Reader#reset()} instead of this method<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * then just seek back to the last known good position.<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * @return A WAL reader.  Close when done with it.<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * @throws IOException<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  public Reader createReader(final FileSystem fs, final Path path,<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      CancelableProgressable reporter) throws IOException {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    return createReader(fs, path, reporter, true);<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>  public Reader createReader(final FileSystem fs, final Path path, CancelableProgressable reporter,<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      boolean allowCustom) throws IOException {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    Class&lt;? extends AbstractFSWALProvider.Reader&gt; lrClass =<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        allowCustom ? logReaderClass : ProtobufLogReader.class;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      // A wal file could be under recovery, so it may take several<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      // tries to get it open. Instead of claiming it is corrupted, retry<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      // to open it up to 5 minutes by default.<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      long startWaiting = EnvironmentEdgeManager.currentTime();<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      long openTimeout = timeoutMillis + startWaiting;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      int nbAttempt = 0;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      AbstractFSWALProvider.Reader reader = null;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      while (true) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        try {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>          reader = lrClass.getDeclaredConstructor().newInstance();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>          reader.init(fs, path, conf, null);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          return reader;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        } catch (IOException e) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          if (reader != null) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            try {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>              reader.close();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>            } catch (IOException exception) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>              LOG.warn("Could not close FSDataInputStream" + exception.getMessage());<a name="line.296"></a>
+<span class="sourceLineNo">297</span>              LOG.debug("exception details", exception);<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>          String msg = e.getMessage();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>          if (msg != null<a name="line.302"></a>
+<span class="sourceLineNo">303</span>              &amp;&amp; (msg.contains("Cannot obtain block length")<a name="line.303"></a>
+<span class="sourceLineNo">304</span>                  || msg.contains("Could not obtain the last block") || msg<a name="line.304"></a>
+<span class="sourceLineNo">305</span>                    .matches("Blocklist for [^ ]* has changed.*"))) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>            if (++nbAttempt == 1) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>              LOG.warn("Lease should have recovered. This is not expected. Will retry", e);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>            }<a name="line.308"></a>
+<span class="sourceLineNo">309</span>            if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>              throw new InterruptedIOException("Operation is cancelled");<a name="line.310"></a>
+<span class="sourceLineNo">311</span>            }<a name="line.311"></a>
+<span class="sourceLineNo">312</span>            if (nbAttempt &gt; 2 &amp;&amp; openTimeout &lt; EnvironmentEdgeManager.currentTime()) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>              LOG.error("Can't open after " + nbAttempt + " attempts and "<a name="line.313"></a>
+<span class="sourceLineNo">314</span>                  + (EnvironmentEdgeManager.currentTime() - startWaiting) + "ms " + " for " + path);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>            } else {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>              try {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>                Thread.sleep(nbAttempt &lt; 3 ? 500 : 1000);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>                continue; // retry<a name="line.318"></a>
+<span class="sourceLineNo">319</span>              } catch (InterruptedException ie) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>                InterruptedIOException iioe = new InterruptedIOException();<a name="line.320"></a>
+<span class="sourceLineNo">321</span>                iioe.initCause(ie);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>                throw iioe;<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>            throw new LeaseNotRecoveredException(e);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>          } else {<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>      }<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    } catch (IOException ie) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      throw ie;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    } catch (Exception e) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      throw new IOException("Cannot get log reader", e);<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>  /**<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * Create a writer for the WAL.<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * Uses defaults.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * &lt;p&gt;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * Should be package-private. public only for tests and<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * {@link org.apache.hadoop.hbase.regionserver.wal.Compressor}<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * @return A WAL writer. Close when done with it.<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   */<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  public Writer createWALWriter(final FileSystem fs, final Path path) throws IOException {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    return FSHLogProvider.createWriter(conf, fs, path, false);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  }<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>   * Should be package-private, visible for recovery testing.<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   * Uses defaults.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   * @return an overwritable writer for recovered edits. caller should close.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  @VisibleForTesting<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  public Writer createRecoveredEditsWriter(final FileSystem fs, final Path path)<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      throws IOException {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    return FSHLogProvider.createWriter(conf, fs, path, true);<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>  // These static methods are currently used where it's impractical to<a name="line.361"></a>
+<span class="sourceLineNo">362</span>  // untangle the reliance on state in the filesystem. They rely on singleton<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  // WALFactory that just provides Reader / Writers.<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  // For now, first Configuration object wins. Practically this just impacts the reader/writer class<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  private static final AtomicReference&lt;WALFactory&gt; singleton = new AtomicReference&lt;&gt;();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  private static final String SINGLETON_ID = WALFactory.class.getName();<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  <a name="line.367"></a>
+<span class="sourceLineNo">368</span>  // Public only for FSHLog<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  public static WALFactory getInstance(Configuration configuration) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    WALFactory factory = singleton.get();<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    if (null == factory) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      WALFactory temp = new WALFactory(configuration);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      if (singleton.compareAndSet(null, temp)) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        factory = temp;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      } else {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        // someone else beat us to initializing<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        try {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>          temp.close();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        } catch (IOException exception) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>          LOG.debug("failed to close temporary singleton. ignoring.", exception);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>        factory = singleton.get();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      }<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return factory;<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>  /**<a name="line.388"></a>
+<span class="sourceLineNo">389</span>   * Create a reader for the given path, accept custom reader classes from conf.<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * @return a WAL Reader, caller must close.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   */<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  public static Reader createReader(final FileSystem fs, final Path path,<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      final Configuration configuration) throws IOException {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    return getInstance(configuration).createReader(fs, path);<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>  /**<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * Create a reader for the given path, accept custom reader classes from conf.<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   * @return a WAL Reader, caller must close.<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  static Reader createReader(final FileSystem fs, final Path path,<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      final Configuration configuration, final CancelableProgressable reporter) throws IOException {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    return getInstance(configuration).createReader(fs, path, reporter);<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>  /**<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * Create a reader for the given path, ignore custom reader classes from conf.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   * only public pending move of {@link org.apache.hadoop.hbase.regionserver.wal.Compressor}<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * @return a WAL Reader, caller must close.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  public static Reader createReaderIgnoreCustomClass(final FileSystem fs, final Path path,<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      final Configuration configuration) throws IOException {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    return getInstance(configuration).createReader(fs, path, null, false);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>  }<a name="line.417"></a>
+<span class="sourceLineNo">418</span><a name="line.418"></a>
+<span class="sourceLineNo">419</span>  /**<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * Uses defaults.<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @return a Writer that will overwrite files. Caller must close.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   */<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  static Writer createRecoveredEditsWriter(final FileSystem fs, final Path path,<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      final Configuration configuration)<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      throws IOException {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    return FSHLogProvider.createWriter(configuration, fs, path, true);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<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>   * If you already have a WALFactory, you should favor the instance method.<a name="line.431"></a>
+<span class="sourceLineNo">432</span>   * Uses defaults.<a name="line.432"></a>
+<span class="sourceLineNo">433</span>   * @return a writer that won't overwrite files. Caller must close.<a name="line.433"></a>
+<span class="sourceLineNo">434</span>   */<a name="line.434"></a>
+<span class="sourceLineNo">435</span>  @VisibleForTesting<a name="line.435"></a>
+<span class="sourceLineNo">436</span>  public static Writer createWALWriter(final FileSystem fs, final Path path,<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      final Configuration configuration)<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      throws IOException {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    return FSHLogProvider.createWriter(configuration, fs, path, false);<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>  public final WALProvider getWALProvider() {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    return this.provider;<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>  public final WALProvider getMetaWALProvider() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    return this.metaProvider.get();<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index 377d6b7..bbe098a 100644
--- a/downloads.html
+++ b/downloads.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180523" />
+    <meta name="Date-Revision-yyyymmdd" content="20180524" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase Downloads</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -366,7 +366,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-05-23</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-05-24</li>
             </p>
                 </div>
 

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index d334deb..460f98e 100644
--- a/integration.html
+++ b/integration.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180523" />
+    <meta name="Date-Revision-yyyymmdd" content="20180524" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -291,7 +291,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-05-23</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-05-24</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index 299cb8c..1ff2dbf 100644
--- a/issue-tracking.html
+++ b/issue-tracking.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180523" />
+    <meta name="Date-Revision-yyyymmdd" content="20180524" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -288,7 +288,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-05-23</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-05-24</li>
             </p>
                 </div>
 


[32/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/CellComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/CellComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/CellComparator.html
index 31cd218..5541ab5 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/CellComparator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/CellComparator.html
@@ -29,116 +29,124 @@
 <span class="sourceLineNo">021</span><a name="line.21"></a>
 <span class="sourceLineNo">022</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>/**<a name="line.24"></a>
-<span class="sourceLineNo">025</span> * Comparator for comparing cells and has some specialized methods that allows comparing individual<a name="line.25"></a>
-<span class="sourceLineNo">026</span> * cell components like row, family, qualifier and timestamp<a name="line.26"></a>
-<span class="sourceLineNo">027</span> */<a name="line.27"></a>
-<span class="sourceLineNo">028</span>@InterfaceAudience.Public<a name="line.28"></a>
-<span class="sourceLineNo">029</span>@InterfaceStability.Evolving<a name="line.29"></a>
-<span class="sourceLineNo">030</span>public interface CellComparator extends Comparator&lt;Cell&gt; {<a name="line.30"></a>
-<span class="sourceLineNo">031</span>  /**<a name="line.31"></a>
-<span class="sourceLineNo">032</span>   * A comparator for ordering cells in user-space tables. Useful when writing cells in sorted<a name="line.32"></a>
-<span class="sourceLineNo">033</span>   * order as necessary for bulk import (i.e. via MapReduce)<a name="line.33"></a>
-<span class="sourceLineNo">034</span>   * &lt;p&gt;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>   * CAUTION: This comparator may provide inaccurate ordering for cells from system tables,<a name="line.35"></a>
-<span class="sourceLineNo">036</span>   * and should not be relied upon in that case.<a name="line.36"></a>
-<span class="sourceLineNo">037</span>   */<a name="line.37"></a>
-<span class="sourceLineNo">038</span>  static CellComparator getInstance() {<a name="line.38"></a>
-<span class="sourceLineNo">039</span>    return CellComparatorImpl.COMPARATOR;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  }<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>  /**<a name="line.42"></a>
-<span class="sourceLineNo">043</span>   * Lexographically compares two cells. The key part of the cell is taken for comparison which<a name="line.43"></a>
-<span class="sourceLineNo">044</span>   * includes row, family, qualifier, timestamp and type<a name="line.44"></a>
-<span class="sourceLineNo">045</span>   * @param leftCell the left hand side cell<a name="line.45"></a>
-<span class="sourceLineNo">046</span>   * @param rightCell the right hand side cell<a name="line.46"></a>
-<span class="sourceLineNo">047</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.47"></a>
-<span class="sourceLineNo">048</span>   *         cells are equal<a name="line.48"></a>
-<span class="sourceLineNo">049</span>   */<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  @Override<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  int compare(Cell leftCell, Cell rightCell);<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  /**<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * Compare cells.<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   * @param ignoreSequenceid True if we are to compare the key portion only and ignore<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   * the sequenceid. Set to false to compare key and consider sequenceid.<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * @return 0 if equal, -1 if a &amp;lt; b, and +1 if a &amp;gt; b.<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  int compare(Cell leftCell, Cell rightCell, boolean ignoreSequenceid);<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  /**<a name="line.61"></a>
-<span class="sourceLineNo">062</span>   * Lexographically compares the rows of two cells.<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * @param leftCell the left hand side cell<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * @param rightCell the right hand side cell<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   *         cells are equal<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   */<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  int compareRows(Cell leftCell, Cell rightCell);<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>   * Compares the row part of the cell with a simple plain byte[] like the<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   * stopRow in Scan.<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * @param cell the cell<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * @param bytes the byte[] representing the row to be compared with<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * @param offset the offset of the byte[]<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * @param length the length of the byte[]<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   *         cells are equal<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  int compareRows(Cell cell, byte[] bytes, int offset, int length);<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>   * Lexographically compares the two cells excluding the row part. It compares family, qualifier,<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * timestamp and the type<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * @param leftCell the left hand side cell<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * @param rightCell the right hand side cell<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   *         cells are equal<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   */<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  int compareWithoutRow(Cell leftCell, Cell rightCell);<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>   * Lexographically compares the families of the two cells<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param leftCell the left hand side cell<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * @param rightCell the right hand side cell<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   *         cells are equal<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   */<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  int compareFamilies(Cell leftCell, Cell rightCell);<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>   * Lexographically compares the qualifiers of the two cells<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * @param leftCell the left hand side cell<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * @param rightCell the right hand side cell<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   *         cells are equal<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   */<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  int compareQualifiers(Cell leftCell, Cell rightCell);<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>   * Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * when we iterate over a memstore and newer versions are the first we trip over when reading from<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * a store file.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * @param leftCell the left hand side cell<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param rightCell the right hand side cell<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * @return 1 if left's timestamp &amp;lt; right's timestamp -1 if left's timestamp &amp;gt; right's<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   *         timestamp 0 if both timestamps are equal<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  int compareTimestamps(Cell leftCell, Cell rightCell);<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  /**<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * when we iterate over a memstore and newer versions are the first we trip over when reading from<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * a store file.<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @param leftCellts the left cell's timestamp<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * @param rightCellts the right cell's timestamp<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   * @return 1 if left's timestamp &amp;lt; right's timestamp -1 if left's timestamp &amp;gt; right's<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   *         timestamp 0 if both timestamps are equal<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   */<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  int compareTimestamps(long leftCellts, long rightCellts);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>}<a name="line.133"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>/**<a name="line.25"></a>
+<span class="sourceLineNo">026</span> * Comparator for comparing cells and has some specialized methods that allows comparing individual<a name="line.26"></a>
+<span class="sourceLineNo">027</span> * cell components like row, family, qualifier and timestamp<a name="line.27"></a>
+<span class="sourceLineNo">028</span> */<a name="line.28"></a>
+<span class="sourceLineNo">029</span>@InterfaceAudience.Public<a name="line.29"></a>
+<span class="sourceLineNo">030</span>@InterfaceStability.Evolving<a name="line.30"></a>
+<span class="sourceLineNo">031</span>public interface CellComparator extends Comparator&lt;Cell&gt; {<a name="line.31"></a>
+<span class="sourceLineNo">032</span>  /**<a name="line.32"></a>
+<span class="sourceLineNo">033</span>   * A comparator for ordering cells in user-space tables. Useful when writing cells in sorted<a name="line.33"></a>
+<span class="sourceLineNo">034</span>   * order as necessary for bulk import (i.e. via MapReduce)<a name="line.34"></a>
+<span class="sourceLineNo">035</span>   * &lt;p&gt;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>   * CAUTION: This comparator may provide inaccurate ordering for cells from system tables,<a name="line.36"></a>
+<span class="sourceLineNo">037</span>   * and should not be relied upon in that case.<a name="line.37"></a>
+<span class="sourceLineNo">038</span>   */<a name="line.38"></a>
+<span class="sourceLineNo">039</span>  static CellComparator getInstance() {<a name="line.39"></a>
+<span class="sourceLineNo">040</span>    return CellComparatorImpl.COMPARATOR;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  }<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>  /**<a name="line.43"></a>
+<span class="sourceLineNo">044</span>   * Lexographically compares two cells. The key part of the cell is taken for comparison which<a name="line.44"></a>
+<span class="sourceLineNo">045</span>   * includes row, family, qualifier, timestamp and type<a name="line.45"></a>
+<span class="sourceLineNo">046</span>   * @param leftCell the left hand side cell<a name="line.46"></a>
+<span class="sourceLineNo">047</span>   * @param rightCell the right hand side cell<a name="line.47"></a>
+<span class="sourceLineNo">048</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   *         cells are equal<a name="line.49"></a>
+<span class="sourceLineNo">050</span>   */<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  @Override<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  int compare(Cell leftCell, Cell rightCell);<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  /**<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * Compare cells.<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   * @param ignoreSequenceid True if we are to compare the key portion only and ignore<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   * the sequenceid. Set to false to compare key and consider sequenceid.<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * @return 0 if equal, -1 if a &amp;lt; b, and +1 if a &amp;gt; b.<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   */<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  int compare(Cell leftCell, Cell rightCell, boolean ignoreSequenceid);<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  /**<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   * Lexographically compares the rows of two cells.<a name="line.63"></a>
+<span class="sourceLineNo">064</span>   * @param leftCell the left hand side cell<a name="line.64"></a>
+<span class="sourceLineNo">065</span>   * @param rightCell the right hand side cell<a name="line.65"></a>
+<span class="sourceLineNo">066</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   *         cells are equal<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  int compareRows(Cell leftCell, Cell rightCell);<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>   * Compares the row part of the cell with a simple plain byte[] like the<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * stopRow in Scan.<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * @param cell the cell<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * @param bytes the byte[] representing the row to be compared with<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * @param offset the offset of the byte[]<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * @param length the length of the byte[]<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   *         cells are equal<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   */<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  int compareRows(Cell cell, byte[] bytes, int offset, int length);<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  /**<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * Lexographically compares the two cells excluding the row part. It compares family, qualifier,<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * timestamp and the type<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * @param leftCell the left hand side cell<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * @param rightCell the right hand side cell<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   *         cells are equal<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  int compareWithoutRow(Cell leftCell, Cell rightCell);<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  /**<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * Lexographically compares the families of the two cells<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param leftCell the left hand side cell<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param rightCell the right hand side cell<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   *         cells are equal<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  int compareFamilies(Cell leftCell, Cell rightCell);<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>   * Lexographically compares the qualifiers of the two cells<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   * @param leftCell the left hand side cell<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * @param rightCell the right hand side cell<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   *         cells are equal<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   */<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  int compareQualifiers(Cell leftCell, Cell rightCell);<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>   * Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * when we iterate over a memstore and newer versions are the first we trip over when reading from<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * a store file.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * @param leftCell the left hand side cell<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param rightCell the right hand side cell<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @return 1 if left's timestamp &amp;lt; right's timestamp -1 if left's timestamp &amp;gt; right's<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   *         timestamp 0 if both timestamps are equal<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  int compareTimestamps(Cell leftCell, Cell rightCell);<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  /**<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * when we iterate over a memstore and newer versions are the first we trip over when reading from<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * a store file.<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param leftCellts the left cell's timestamp<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * @param rightCellts the right cell's timestamp<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   * @return 1 if left's timestamp &amp;lt; right's timestamp -1 if left's timestamp &amp;gt; right's<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   *         timestamp 0 if both timestamps are equal<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   */<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  int compareTimestamps(long leftCellts, long rightCellts);<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>   * @return A dumbed-down, fast comparator for hbase2 base-type, the {@link ByteBufferKeyValue}.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   *   Create an instance when you make a new memstore, when you know only BBKVs will be passed.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   *   Do not pollute with types other than BBKV if can be helped; the Comparator will slow.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   */<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  Comparator getSimpleComparator();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>}<a name="line.141"></a>
 
 
 


[02/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndMutateTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndMutateTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndMutateTest.html
index a454926..91ad073 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndMutateTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndMutateTest.html
@@ -133,7 +133,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2055">PerformanceEvaluation.CheckAndMutateTest</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2059">PerformanceEvaluation.CheckAndMutateTest</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.CASTableTest</a></pre>
 </li>
 </ul>
@@ -202,8 +202,10 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndMutateTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndMutateTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>
+<div class="block">Test for individual row.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -221,13 +223,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.Test">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -261,7 +256,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CheckAndMutateTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndMutateTest.html#line.2056">CheckAndMutateTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndMutateTest.html#line.2060">CheckAndMutateTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
                    <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                    <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -280,11 +275,19 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testRow</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndMutateTest.html#line.2061">testRow</a>(int&nbsp;i)
-      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndMutateTest.html#line.2065">testRow</a>(int&nbsp;i)
+         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">PerformanceEvaluation.TestBase</a></code></span></div>
+<div class="block">Test for individual row.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">testRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>i</code> - Row index.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the row was sent to server and need to record metrics.
+         False if not, multiGet and multiPut e.g., the rows are sent
+         to server only if enough gets/puts are gathered.</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>
 </dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndPutTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndPutTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndPutTest.html
index dc45723..1ab651b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndPutTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndPutTest.html
@@ -133,7 +133,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2075">PerformanceEvaluation.CheckAndPutTest</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2080">PerformanceEvaluation.CheckAndPutTest</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.CASTableTest</a></pre>
 </li>
 </ul>
@@ -202,8 +202,10 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndPutTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndPutTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>
+<div class="block">Test for individual row.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -221,13 +223,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.Test">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -261,7 +256,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CheckAndPutTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndPutTest.html#line.2076">CheckAndPutTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndPutTest.html#line.2081">CheckAndPutTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
                 <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                 <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -280,11 +275,19 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testRow</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndPutTest.html#line.2081">testRow</a>(int&nbsp;i)
-      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndPutTest.html#line.2086">testRow</a>(int&nbsp;i)
+         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">PerformanceEvaluation.TestBase</a></code></span></div>
+<div class="block">Test for individual row.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">testRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>i</code> - Row index.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the row was sent to server and need to record metrics.
+         False if not, multiGet and multiPut e.g., the rows are sent
+         to server only if enough gets/puts are gathered.</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>
 </dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CmdDescriptor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CmdDescriptor.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CmdDescriptor.html
index 4025751..f69c401 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CmdDescriptor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.CmdDescriptor.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.603">PerformanceEvaluation.CmdDescriptor</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.633">PerformanceEvaluation.CmdDescriptor</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">Describes a command.</div>
 </li>
@@ -220,7 +220,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cmdClass</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a>&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CmdDescriptor.html#line.604">cmdClass</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a>&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CmdDescriptor.html#line.634">cmdClass</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -229,7 +229,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>name</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/PerformanceEvaluation.CmdDescriptor.html#line.605">name</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/PerformanceEvaluation.CmdDescriptor.html#line.635">name</a></pre>
 </li>
 </ul>
 <a name="description">
@@ -238,7 +238,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>description</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/PerformanceEvaluation.CmdDescriptor.html#line.606">description</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/PerformanceEvaluation.CmdDescriptor.html#line.636">description</a></pre>
 </li>
 </ul>
 </li>
@@ -255,7 +255,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CmdDescriptor</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CmdDescriptor.html#line.608">CmdDescriptor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a>&gt;&nbsp;cmdClass,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CmdDescriptor.html#line.638">CmdDescriptor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a>&gt;&nbsp;cmdClass,
               <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,
               <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;description)</pre>
 </li>
@@ -274,7 +274,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getCmdClass</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CmdDescriptor.html#line.614">getCmdClass</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CmdDescriptor.html#line.644">getCmdClass</a>()</pre>
 </li>
 </ul>
 <a name="getName--">
@@ -283,7 +283,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getName</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/PerformanceEvaluation.CmdDescriptor.html#line.618">getName</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/PerformanceEvaluation.CmdDescriptor.html#line.648">getName</a>()</pre>
 </li>
 </ul>
 <a name="getDescription--">
@@ -292,7 +292,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getDescription</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/PerformanceEvaluation.CmdDescriptor.html#line.622">getDescription</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/PerformanceEvaluation.CmdDescriptor.html#line.652">getDescription</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html
index 6009b41..8472e43 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html
@@ -128,7 +128,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2179">PerformanceEvaluation.FilteredScanTest</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2209">PerformanceEvaluation.FilteredScanTest</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TableTest</a></pre>
 </li>
 </ul>
@@ -212,8 +212,10 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html#constructScan-byte:A-">constructScan</a></span>(byte[]&nbsp;valuePrefix)</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>
+<div class="block">Test for individual row.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -224,13 +226,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.Test">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -264,7 +259,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockListLast">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>protected static final&nbsp;org.slf4j.Logger <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html#line.2180">LOG</a></pre>
+<pre>protected static final&nbsp;org.slf4j.Logger <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html#line.2210">LOG</a></pre>
 </li>
 </ul>
 </li>
@@ -281,7 +276,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FilteredScanTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html#line.2182">FilteredScanTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html#line.2212">FilteredScanTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
                  <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                  <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -300,11 +295,19 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockList">
 <li class="blockList">
 <h4>testRow</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html#line.2187">testRow</a>(int&nbsp;i)
-      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html#line.2217">testRow</a>(int&nbsp;i)
+         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">PerformanceEvaluation.TestBase</a></code></span></div>
+<div class="block">Test for individual row.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">testRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>i</code> - Row index.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the row was sent to server and need to record metrics.
+         False if not, multiGet and multiPut e.g., the rows are sent
+         to server only if enough gets/puts are gathered.</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>
 </dl>
@@ -316,7 +319,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockListLast">
 <li class="blockList">
 <h4>constructScan</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.client.Scan&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html#line.2204">constructScan</a>(byte[]&nbsp;valuePrefix)
+<pre>protected&nbsp;org.apache.hadoop.hbase.client.Scan&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html#line.2235">constructScan</a>(byte[]&nbsp;valuePrefix)
                                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.IncrementTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.IncrementTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.IncrementTest.html
index 76b6e85..2b2e682 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.IncrementTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.IncrementTest.html
@@ -133,7 +133,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2016">PerformanceEvaluation.IncrementTest</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2018">PerformanceEvaluation.IncrementTest</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.CASTableTest</a></pre>
 </li>
 </ul>
@@ -202,8 +202,10 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.IncrementTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.IncrementTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>
+<div class="block">Test for individual row.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -221,13 +223,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.Test">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -261,7 +256,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>IncrementTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.IncrementTest.html#line.2017">IncrementTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.IncrementTest.html#line.2019">IncrementTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
               <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
               <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -280,11 +275,19 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.CASTa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testRow</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.IncrementTest.html#line.2022">testRow</a>(int&nbsp;i)
-      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.IncrementTest.html#line.2024">testRow</a>(int&nbsp;i)
+         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">PerformanceEvaluation.TestBase</a></code></span></div>
+<div class="block">Test for individual row.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">testRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>i</code> - Row index.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the row was sent to server and need to record metrics.
+         False if not, multiGet and multiPut e.g., the rows are sent
+         to server only if enough gets/puts are gathered.</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>
 </dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html
index 238b27c..3fe1c57 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html
@@ -128,7 +128,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1839">PerformanceEvaluation.RandomReadTest</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1864">PerformanceEvaluation.RandomReadTest</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TableTest</a></pre>
 </li>
 </ul>
@@ -220,8 +220,10 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html#getReportingPeriod--">getReportingPeriod</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>
+<div class="block">Test for individual row.</div>
+</td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
@@ -236,13 +238,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.Test">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -276,7 +271,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockList">
 <li class="blockList">
 <h4>consistency</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.client.Consistency <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html#line.1840">consistency</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.client.Consistency <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html#line.1865">consistency</a></pre>
 </li>
 </ul>
 <a name="gets">
@@ -285,7 +280,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockList">
 <li class="blockList">
 <h4>gets</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;org.apache.hadoop.hbase.client.Get&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html#line.1841">gets</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;org.apache.hadoop.hbase.client.Get&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html#line.1866">gets</a></pre>
 </li>
 </ul>
 <a name="rd">
@@ -294,7 +289,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockListLast">
 <li class="blockList">
 <h4>rd</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html#line.1842">rd</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html#line.1867">rd</a></pre>
 </li>
 </ul>
 </li>
@@ -311,7 +306,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RandomReadTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html#line.1844">RandomReadTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html#line.1869">RandomReadTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
                <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -330,12 +325,20 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockList">
 <li class="blockList">
 <h4>testRow</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html#line.1854">testRow</a>(int&nbsp;i)
-      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
-             <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>
+<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html#line.1879">testRow</a>(int&nbsp;i)
+         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
+                <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"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">PerformanceEvaluation.TestBase</a></code></span></div>
+<div class="block">Test for individual row.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">testRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>i</code> - Row index.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the row was sent to server and need to record metrics.
+         False if not, multiGet and multiPut e.g., the rows are sent
+         to server only if enough gets/puts are gathered.</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>
 <dd><code><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></code></dd>
@@ -348,7 +351,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockList">
 <li class="blockList">
 <h4>getReportingPeriod</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html#line.1888">getReportingPeriod</a>()</pre>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html#line.1916">getReportingPeriod</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#getReportingPeriod--">getReportingPeriod</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
@@ -361,7 +364,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testTakedown</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html#line.1894">testTakedown</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html#line.1922">testTakedown</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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10000Test.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10000Test.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10000Test.html
index fac8fef..f46d053 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10000Test.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10000Test.html
@@ -133,7 +133,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1828">PerformanceEvaluation.RandomScanWithRange10000Test</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1853">PerformanceEvaluation.RandomScanWithRange10000Test</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.RandomScanWithRangeTest</a></pre>
 </li>
 </ul>
@@ -221,13 +221,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Rando
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.Test">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -261,7 +254,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Rando
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RandomScanWithRange10000Test</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10000Test.html#line.1829">RandomScanWithRange10000Test</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10000Test.html#line.1854">RandomScanWithRange10000Test</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
                              <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                              <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -280,7 +273,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Rando
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getStartAndStopRow</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.util.Pair&lt;byte[],byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10000Test.html#line.1834">getStartAndStopRow</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.util.Pair&lt;byte[],byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10000Test.html#line.1859">getStartAndStopRow</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html#getStartAndStopRow--">getStartAndStopRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.RandomScanWithRangeTest</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange1000Test.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange1000Test.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange1000Test.html
index 08a9543..91e0cdc 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange1000Test.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange1000Test.html
@@ -133,7 +133,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1817">PerformanceEvaluation.RandomScanWithRange1000Test</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1842">PerformanceEvaluation.RandomScanWithRange1000Test</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.RandomScanWithRangeTest</a></pre>
 </li>
 </ul>
@@ -221,13 +221,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Rando
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.Test">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -261,7 +254,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Rando
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RandomScanWithRange1000Test</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange1000Test.html#line.1818">RandomScanWithRange1000Test</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange1000Test.html#line.1843">RandomScanWithRange1000Test</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
                             <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                             <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -280,7 +273,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Rando
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getStartAndStopRow</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.util.Pair&lt;byte[],byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange1000Test.html#line.1823">getStartAndStopRow</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.util.Pair&lt;byte[],byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange1000Test.html#line.1848">getStartAndStopRow</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html#getStartAndStopRow--">getStartAndStopRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.RandomScanWithRangeTest</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange100Test.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange100Test.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange100Test.html
index 9a5eed7..3128700 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange100Test.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange100Test.html
@@ -133,7 +133,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1806">PerformanceEvaluation.RandomScanWithRange100Test</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1831">PerformanceEvaluation.RandomScanWithRange100Test</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.RandomScanWithRangeTest</a></pre>
 </li>
 </ul>
@@ -221,13 +221,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Rando
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.Test">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -261,7 +254,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Rando
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RandomScanWithRange100Test</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange100Test.html#line.1807">RandomScanWithRange100Test</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange100Test.html#line.1832">RandomScanWithRange100Test</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
                            <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                            <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -280,7 +273,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Rando
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getStartAndStopRow</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.util.Pair&lt;byte[],byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange100Test.html#line.1812">getStartAndStopRow</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.util.Pair&lt;byte[],byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange100Test.html#line.1837">getStartAndStopRow</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html#getStartAndStopRow--">getStartAndStopRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.RandomScanWithRangeTest</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10Test.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10Test.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10Test.html
index ead77bf..0de34cf 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10Test.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10Test.html
@@ -133,7 +133,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1795">PerformanceEvaluation.RandomScanWithRange10Test</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1820">PerformanceEvaluation.RandomScanWithRange10Test</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.RandomScanWithRangeTest</a></pre>
 </li>
 </ul>
@@ -221,13 +221,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Rando
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.Test">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -261,7 +254,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Rando
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RandomScanWithRange10Test</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10Test.html#line.1796">RandomScanWithRange10Test</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10Test.html#line.1821">RandomScanWithRange10Test</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
                           <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                           <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -280,7 +273,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Rando
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getStartAndStopRow</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.util.Pair&lt;byte[],byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10Test.html#line.1801">getStartAndStopRow</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.util.Pair&lt;byte[],byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10Test.html#line.1826">getStartAndStopRow</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html#getStartAndStopRow--">getStartAndStopRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.RandomScanWithRangeTest</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html
index ff34d58..1511c73 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html
@@ -132,7 +132,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>abstract static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1735">PerformanceEvaluation.RandomScanWithRangeTest</a>
+<pre>abstract static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1759">PerformanceEvaluation.RandomScanWithRangeTest</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TableTest</a></pre>
 </li>
 </ul>
@@ -213,8 +213,10 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html#getStartAndStopRow--">getStartAndStopRow</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i3" class="rowColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>
+<div class="block">Test for individual row.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -225,13 +227,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.Test">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -265,7 +260,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RandomScanWithRangeTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html#line.1736">RandomScanWithRangeTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html#line.1760">RandomScanWithRangeTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
                         <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                         <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -284,11 +279,19 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockList">
 <li class="blockList">
 <h4>testRow</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html#line.1741">testRow</a>(int&nbsp;i)
-      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html#line.1765">testRow</a>(int&nbsp;i)
+         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">PerformanceEvaluation.TestBase</a></code></span></div>
+<div class="block">Test for individual row.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">testRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>i</code> - Row index.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the row was sent to server and need to record metrics.
+         False if not, multiGet and multiPut e.g., the rows are sent
+         to server only if enough gets/puts are gathered.</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>
 </dl>
@@ -300,7 +303,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartAndStopRow</h4>
-<pre>protected abstract&nbsp;org.apache.hadoop.hbase.util.Pair&lt;byte[],byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html#line.1780">getStartAndStopRow</a>()</pre>
+<pre>protected abstract&nbsp;org.apache.hadoop.hbase.util.Pair&lt;byte[],byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html#line.1805">getStartAndStopRow</a>()</pre>
 </li>
 </ul>
 <a name="generateStartAndStopRows-int-">
@@ -309,7 +312,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockList">
 <li class="blockList">
 <h4>generateStartAndStopRows</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.util.Pair&lt;byte[],byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html#line.1782">generateStartAndStopRows</a>(int&nbsp;maxRange)</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.util.Pair&lt;byte[],byte[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html#line.1807">generateStartAndStopRows</a>(int&nbsp;maxRange)</pre>
 </li>
 </ul>
 <a name="getReportingPeriod--">
@@ -318,7 +321,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getReportingPeriod</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html#line.1789">getReportingPeriod</a>()</pre>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html#line.1814">getReportingPeriod</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#getReportingPeriod--">getReportingPeriod</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html
index 60aac4a..127f0aa 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html
@@ -128,7 +128,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1688">PerformanceEvaluation.RandomSeekScanTest</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1711">PerformanceEvaluation.RandomSeekScanTest</a>
 extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TableTest</a></pre>
 </li>
 </ul>
@@ -201,8 +201,10 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html#getReportingPeriod--">getReportingPeriod</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>
+<div class="block">Test for individual row.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -213,13 +215,6 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.Test">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
 <!--   -->
 </a>
@@ -253,7 +248,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RandomSeekScanTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html#line.1689">RandomSeekScanTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html#line.1712">RandomSeekScanTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
                    <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                    <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -272,11 +267,19 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockList">
 <li class="blockList">
 <h4>testRow</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html#line.1694">testRow</a>(int&nbsp;i)
-      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html#line.1717">testRow</a>(int&nbsp;i)
+         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">PerformanceEvaluation.TestBase</a></code></span></div>
+<div class="block">Test for individual row.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">testRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>i</code> - Row index.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the row was sent to server and need to record metrics.
+         False if not, multiGet and multiPut e.g., the rows are sent
+         to server only if enough gets/puts are gathered.</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>
 </dl>
@@ -288,7 +291,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getReportingPeriod</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html#line.1728">getReportingPeriod</a>()</pre>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html#line.1752">getReportingPeriod</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#getReportingPeriod--">getReportingPeriod</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html
index 4caf7a4..97804a8 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html
@@ -109,6 +109,9 @@ var activeTableTab = "activeTableTab";
 <li><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.PerformanceEvaluation.BufferedMutatorTest</a></li>
 <li>
 <ul class="inheritance">
+<li><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.SequentialWriteTest.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.PerformanceEvaluation.SequentialWriteTest</a></li>
+<li>
+<ul class="inheritance">
 <li>org.apache.hadoop.hbase.PerformanceEvaluation.RandomWriteTest</li>
 </ul>
 </li>
@@ -119,6 +122,8 @@ var activeTableTab = "activeTableTab";
 </ul>
 </li>
 </ul>
+</li>
+</ul>
 <div class="description">
 <ul class="blockList">
 <li class="blockList">
@@ -128,8 +133,8 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1903">PerformanceEvaluation.RandomWriteTest</a>
-extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.BufferedMutatorTest</a></pre>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.1931">PerformanceEvaluation.RandomWriteTest</a>
+extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.SequentialWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.SequentialWriteTest</a></pre>
 </li>
 </ul>
 </div>
@@ -197,23 +202,23 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Buffe
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html#testRow-int-">testRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
+<td class="colFirst"><code>protected byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html#generateRow-int-">generateRow</a></span>(int&nbsp;i)</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.BufferedMutatorTest">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.SequentialWriteTest">
 <!--   -->
 </a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.BufferedMutatorTest</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html#onTakedown--">onTakedown</a></code></li>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.SequentialWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.SequentialWriteTest</a></h3>
+<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.SequentialWriteTest.html#testRow-int-">testRow</a></code></li>
 </ul>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.Test">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.BufferedMutatorTest">
 <!--   -->
 </a>
-<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.Test</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#closeConnection--">closeConnection</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Test.html#createConnection--">createConnection</a></code></li>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.BufferedMutatorTest</a></h3>
+<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html#onStartup--">onStartup</a>, <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html#onTakedown--">onTakedown</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.PerformanceEvaluation.TestBase">
@@ -249,7 +254,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Buffe
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RandomWriteTest</h4>
-<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html#line.1904">RandomWriteTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
+<pre><a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html#line.1932">RandomWriteTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;con,
                 <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;options,
                 <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Status.html" title="interface in org.apache.hadoop.hbase">PerformanceEvaluation.Status</a>&nbsp;status)</pre>
 </li>
@@ -262,19 +267,16 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Buffe
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="testRow-int-">
+<a name="generateRow-int-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>testRow</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html#line.1909">testRow</a>(int&nbsp;i)
-      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<h4>generateRow</h4>
+<pre>protected&nbsp;byte[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html#line.1937">generateRow</a>(int&nbsp;i)</pre>
 <dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">testRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></code></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="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.SequentialWriteTest.html#generateRow-int-">generateRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.SequentialWriteTest.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.SequentialWriteTest</a></code></dd>
 </dl>
 </li>
 </ul>


[23/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
index 9644187..b979909 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
@@ -1199,2602 +1199,2599 @@
 <span class="sourceLineNo">1191</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1191"></a>
 <span class="sourceLineNo">1192</span>    try {<a name="line.1192"></a>
 <span class="sourceLineNo">1193</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>      ServerName sn = ServerName.parseVersionedServerName(this.serverName.getVersionedBytes());<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      request.setServer(ProtobufUtil.toServerName(sn));<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>      request.setLoad(sl);<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>      rss.regionServerReport(null, request.build());<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>    } catch (ServiceException se) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>        // This will be caught and handled as a fatal error in run()<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>        throw ioe;<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>      }<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>      if (rssStub == rss) {<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>        rssStub = null;<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      }<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>      // Method blocks until new master is found or we are stopped<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      createRegionServerStatusStub(true);<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>    }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>  }<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span><a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>  /**<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>   *<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>   * @param regionSizeStore The store containing region sizes<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>   */<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>    if (rss == null) {<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>      // the current server could be stopping.<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      return true;<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    }<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>    try {<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>    } catch (ServiceException se) {<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>            + " This will be retried.", ioe);<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>        return true;<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      }<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      if (rssStub == rss) {<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>        rssStub = null;<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>      }<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>      createRegionServerStatusStub(true);<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>            return false;<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>          }<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>        }<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      }<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    }<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    return true;<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>  }<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>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>   *<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>   * @param rss The stub to send to the Master<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>   * @param regionSizeStore The store containing region sizes<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>   */<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>  void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    RegionSpaceUseReportRequest request =<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    // Record the number of size reports sent<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>    if (metricsRegionServer != null) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    }<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>  }<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span><a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>  /**<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>   *<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>   * @param regionSizeStore The size in bytes of regions<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>   * @return The corresponding protocol buffer message.<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>   */<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    }<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>    return request.build();<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>  }<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span><a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>  /**<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>   * protobuf message.<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>   *<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>   * @param regionInfo The RegionInfo<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>   * @return The protocol buffer<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>   */<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    return RegionSpaceUse.newBuilder()<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>        .build();<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>  ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>      throws IOException {<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>    // the wrapper to compute those numbers in one place.<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    // history.<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>    long usedMemory = -1L;<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>    long maxMemory = -1L;<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>    if (usage != null) {<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>      usedMemory = usage.getUsed();<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>      maxMemory = usage.getMax();<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>    }<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span><a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>    for (String coprocessor : coprocessors) {<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>    }<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    for (HRegion region : regions) {<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>      if (region.getCoprocessorHost() != null) {<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>        Iterator&lt;String&gt; iterator = regionCoprocessors.iterator();<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>        while (iterator.hasNext()) {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(iterator.next()).build());<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>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>          .getCoprocessors()) {<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<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>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    if (this.infoServer != null) {<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    } else {<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>      serverLoad.setInfoServerPort(-1);<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>    // for the replicationLoad purpose. Only need to get from one executorService<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    // either source or sink will get the same info<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    ReplicationSourceService rsources = getReplicationSourceService();<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span><a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>    if (rsources != null) {<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>      // always refresh first to get the latest value<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>      ReplicationLoad rLoad = rsources.refreshAndGetReplicationLoad();<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>      if (rLoad != null) {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad.getReplicationLoadSourceList()) {<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>        }<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>      }<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>    }<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span><a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>    return serverLoad.build();<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>  }<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span><a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>  String getOnlineRegionsAsPrintableString() {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    StringBuilder sb = new StringBuilder();<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    }<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    return sb.toString();<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>  }<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>  /**<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>   * Wait on regions close.<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>   */<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    // Wait till all regions are closed before going out.<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    int lastCount = -1;<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    long previousLogTime = 0;<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    boolean interrupted = false;<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    try {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      while (!isOnlineRegionsEmpty()) {<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        int count = getNumberOfOnlineRegions();<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>        // Only print a message if the count of regions has changed.<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>        if (count != lastCount) {<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>          // Log every second at most<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>            previousLogTime = System.currentTimeMillis();<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>            lastCount = count;<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>            // Only print out regions still closing if a small number else will<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>            // swamp the log.<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>            }<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>          }<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>        }<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>        // protect against the case where an open comes in after we start the<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        // iterator of onlineRegions to close all user regions.<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>            closedRegions.add(hri.getEncodedName());<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>            // Don't update zk with this close transition; pass false.<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>            closeRegionIgnoreErrors(hri, abort);<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>        // No regions in RIT, we could stop waiting now.<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>          if (!isOnlineRegionsEmpty()) {<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>                " because some regions failed closing");<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>          }<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>          break;<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>        }<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>        if (sleep(200)) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>          interrupted = true;<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>        }<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>      }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>    } finally {<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      if (interrupted) {<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>        Thread.currentThread().interrupt();<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>  }<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span><a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  private boolean sleep(long millis) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    boolean interrupted = false;<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>    try {<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      Thread.sleep(millis);<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>    } catch (InterruptedException e) {<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      LOG.warn("Interrupted while sleeping");<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      interrupted = true;<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>    }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>    return interrupted;<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>  }<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span><a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>  private void shutdownWAL(final boolean close) {<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>    if (this.walFactory != null) {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      try {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (close) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          walFactory.close();<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        } else {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>          walFactory.shutdown();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      } catch (Throwable e) {<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      }<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    }<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>  /*<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>   *<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>   * @param c Extra configuration.<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>   */<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  throws IOException {<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>    try {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>      boolean updateRootDir = false;<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        String key = e.getName();<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        // The hostname the master sees us as.<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>              this.startcode);<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>            LOG.error(msg);<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>            throw new IOException(msg);<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          }<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>            LOG.error(msg);<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>          }<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>          continue;<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>        }<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span><a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>        String value = e.getValue();<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>            updateRootDir = true;<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><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>        if (LOG.isDebugEnabled()) {<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>        }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>        this.conf.set(key, value);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      }<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>      createMyEphemeralNode();<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>      if (updateRootDir) {<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>        initializeFileSystem();<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>      }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span><a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<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>      // Save it in a file, this will allow to see if we crash<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span><a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      setupWALAndReplication();<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          new MetricsRegionServerWrapperImpl(this), conf);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>      this.metricsTable = new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      pauseMonitor.start();<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span><a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        startServices();<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      }<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>      // or make sense of it.<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      startReplicationService();<a name="line.1543"></a>
+<span class="sourceLineNo">1194</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>      request.setLoad(sl);<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>      rss.regionServerReport(null, request.build());<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    } catch (ServiceException se) {<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>        // This will be caught and handled as a fatal error in run()<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>        throw ioe;<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>      }<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>      if (rssStub == rss) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>        rssStub = null;<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>      }<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>      // Method blocks until new master is found or we are stopped<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>      createRegionServerStatusStub(true);<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>    }<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>  }<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span><a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>  /**<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>   *<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>   * @param regionSizeStore The store containing region sizes<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>   */<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>    if (rss == null) {<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      // the current server could be stopping.<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>      return true;<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>    }<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    try {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>    } catch (ServiceException se) {<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>            + " This will be retried.", ioe);<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>        return true;<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>      }<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>      if (rssStub == rss) {<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>        rssStub = null;<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      }<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>      createRegionServerStatusStub(true);<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>            return false;<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>          }<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>        }<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>      }<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>    }<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>    return true;<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>  }<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span><a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>  /**<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>   *<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>   * @param rss The stub to send to the Master<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>   * @param regionSizeStore The store containing region sizes<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>   */<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>  void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>    RegionSpaceUseReportRequest request =<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>    // Record the number of size reports sent<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>    if (metricsRegionServer != null) {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<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><a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>  /**<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>   *<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>   * @param regionSizeStore The size in bytes of regions<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>   * @return The corresponding protocol buffer message.<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>   */<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>    return request.build();<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>  /**<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>   * protobuf message.<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>   *<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>   * @param regionInfo The RegionInfo<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   * @return The protocol buffer<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>   */<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>    return RegionSpaceUse.newBuilder()<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>        .build();<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>  ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      throws IOException {<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>    // the wrapper to compute those numbers in one place.<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    // history.<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>    long usedMemory = -1L;<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    long maxMemory = -1L;<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>    if (usage != null) {<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>      usedMemory = usage.getUsed();<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>      maxMemory = usage.getMax();<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>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>    for (String coprocessor : coprocessors) {<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>    }<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>    for (HRegion region : regions) {<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>      if (region.getCoprocessorHost() != null) {<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>        Iterator&lt;String&gt; iterator = regionCoprocessors.iterator();<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>        while (iterator.hasNext()) {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(iterator.next()).build());<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>        }<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>      }<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>          .getCoprocessors()) {<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>      }<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>    }<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>    if (this.infoServer != null) {<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>    } else {<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>      serverLoad.setInfoServerPort(-1);<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>    // for the replicationLoad purpose. Only need to get from one executorService<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>    // either source or sink will get the same info<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>    ReplicationSourceService rsources = getReplicationSourceService();<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span><a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>    if (rsources != null) {<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>      // always refresh first to get the latest value<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>      ReplicationLoad rLoad = rsources.refreshAndGetReplicationLoad();<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>      if (rLoad != null) {<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad.getReplicationLoadSourceList()) {<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>        }<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>      }<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>    }<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span><a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>    return serverLoad.build();<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>  }<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span><a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>  String getOnlineRegionsAsPrintableString() {<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>    StringBuilder sb = new StringBuilder();<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>    }<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>    return sb.toString();<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>  }<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span><a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>  /**<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>   * Wait on regions close.<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>   */<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>    // Wait till all regions are closed before going out.<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>    int lastCount = -1;<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>    long previousLogTime = 0;<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>    boolean interrupted = false;<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>    try {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>      while (!isOnlineRegionsEmpty()) {<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>        int count = getNumberOfOnlineRegions();<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>        // Only print a message if the count of regions has changed.<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>        if (count != lastCount) {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>          // Log every second at most<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>            previousLogTime = System.currentTimeMillis();<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>            lastCount = count;<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>            // Only print out regions still closing if a small number else will<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>            // swamp the log.<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>            }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>          }<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>        }<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>        // protect against the case where an open comes in after we start the<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>        // iterator of onlineRegions to close all user regions.<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>            closedRegions.add(hri.getEncodedName());<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>            // Don't update zk with this close transition; pass false.<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>            closeRegionIgnoreErrors(hri, abort);<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>        // No regions in RIT, we could stop waiting now.<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>          if (!isOnlineRegionsEmpty()) {<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>                " because some regions failed closing");<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>          }<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>          break;<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>        }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>        if (sleep(200)) {<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>          interrupted = true;<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>        }<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      }<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>    } finally {<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>      if (interrupted) {<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>        Thread.currentThread().interrupt();<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><a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>  private boolean sleep(long millis) {<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>    boolean interrupted = false;<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    try {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>      Thread.sleep(millis);<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>    } catch (InterruptedException e) {<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      LOG.warn("Interrupted while sleeping");<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      interrupted = true;<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>    return interrupted;<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>  }<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span><a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>  private void shutdownWAL(final boolean close) {<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    if (this.walFactory != null) {<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>      try {<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>        if (close) {<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>          walFactory.close();<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        } else {<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>          walFactory.shutdown();<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>        }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>      } catch (Throwable e) {<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>      }<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    }<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>  }<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span><a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>  /*<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>   *<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>   * @param c Extra configuration.<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>   */<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>  throws IOException {<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>    try {<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      boolean updateRootDir = false;<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>        String key = e.getName();<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        // The hostname the master sees us as.<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>              this.startcode);<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>            LOG.error(msg);<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>            throw new IOException(msg);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>          }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>            LOG.error(msg);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>          }<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>          continue;<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>        }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span><a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>        String value = e.getValue();<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>            updateRootDir = true;<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>        if (LOG.isDebugEnabled()) {<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>        }<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>        this.conf.set(key, value);<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      createMyEphemeralNode();<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span><a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>      if (updateRootDir) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        initializeFileSystem();<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>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>      }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span><a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      // Save it in a file, this will allow to see if we crash<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span><a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>      setupWALAndReplication();<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>          new MetricsRegionServerWrapperImpl(this), conf);<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      this.metricsTable = new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      pauseMonitor.start();<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span><a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>        startServices();<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>      }<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      // or make sense of it.<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      startReplicationService();<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span><a name="line.1543"></a>
 <span class="sourceLineNo">1544</span><a name="line.1544"></a>
-<span class="sourceLineNo">1545</span><a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      // Set up ZK<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.isa +<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          ", sessionid=0x" +<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>      // Wake up anyone waiting for this server to online<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>      synchronized (online) {<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>        online.set(true);<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>        online.notifyAll();<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>      }<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>    } catch (Throwable e) {<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>      stop("Failed initialization");<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"),<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          "Region server startup failed");<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    } finally {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      sleeper.skipSleepCycle();<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>  protected void initializeMemStoreChunkCreator() {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    if (MemStoreLAB.isEnabled(conf)) {<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      // MSLAB is enabled. So initialize MemStoreChunkPool<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      // By this time, the MemstoreFlusher is already initialized. We can get the global limits from<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      // it.<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      Pair&lt;Long, MemoryType&gt; pair = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      long globalMemStoreSize = pair.getFirst();<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      boolean offheap = this.regionServerAccounting.isOffheap();<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>      // When off heap memstore in use, take full area for chunk pool.<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      float poolSizePercentage = offheap? 1.0F:<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>          conf.getFloat(MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY, MemStoreLAB.POOL_MAX_SIZE_DEFAULT);<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>      float initialCountPercentage = conf.getFloat(MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY,<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          MemStoreLAB.POOL_INITIAL_SIZE_DEFAULT);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>      int chunkSize = conf.getInt(MemStoreLAB.CHUNK_SIZE_KEY, MemStoreLAB.CHUNK_SIZE_DEFAULT);<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // init the chunkCreator<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      ChunkCreator chunkCreator =<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>          ChunkCreator.initialize(chunkSize, offheap, globalMemStoreSize, poolSizePercentage,<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      initialCountPercentage, this.hMemManager);<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    }<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>  }<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span><a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>  private void startHeapMemoryManager() {<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>    this.hMemManager = HeapMemoryManager.create(this.conf, this.cacheFlusher, this,<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>        this.regionServerAccounting);<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>    if (this.hMemManager != null) {<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      this.hMemManager.start(getChoreService());<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>    }<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span><a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>  private void createMyEphemeralNode() throws KeeperException, IOException {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>  }<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span><a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>  }<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span><a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  @Override<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    return regionServerAccounting;<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>  }<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span><a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  /*<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>   * @param r Region to get RegionLoad for.<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>   * @return RegionLoad instance.<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>   *<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>   * @throws IOException<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>   */<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>    int stores = 0;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    int storefiles = 0;<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    int storeUncompressedSizeMB = 0;<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    int storefileSizeMB = 0;<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>    int memstoreSizeMB = (int) (r.getMemStoreDataSize() / 1024 / 1024);<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>    long storefileIndexSizeKB = 0;<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>    int rootLevelIndexSizeKB = 0;<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>    int totalStaticIndexSizeKB = 0;<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>    int totalStaticBloomSizeKB = 0;<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    long totalCompactingKVs = 0;<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    long currentCompactedKVs = 0;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    stores += storeList.size();<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>    for (HStore store : storeList) {<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      storefiles += store.getStorefilesCount();<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>      //TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      storefileIndexSizeKB += store.getStorefilesRootLevelIndexSize() / 1024;<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      if (progress != null) {<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      }<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      rootLevelIndexSizeKB += (int) (store.getStorefilesRootLevelIndexSize() / 1024);<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<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>    float dataLocality =<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>        r.getHDFSBlocksDistribution().getBlockLocalityIndex(serverName.getHostname());<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    if (regionLoadBldr == null) {<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    }<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>    if (regionSpecifier == null) {<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      .setStores(stores)<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>      .setStorefiles(storefiles)<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      .setMemStoreSizeMB(memstoreSizeMB)<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      .setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB)<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      .setDataLocality(dataLocality)<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span><a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    return regionLoadBldr.build();<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>   * @param encodedRegionName<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>   * @return An instance of RegionLoad.<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>   */<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="lin

<TRUNCATED>

[29/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/ExtendedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ExtendedCell.html b/devapidocs/src-html/org/apache/hadoop/hbase/ExtendedCell.html
index b96d8b1..f759d1b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ExtendedCell.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ExtendedCell.html
@@ -38,9 +38,9 @@
 <span class="sourceLineNo">030</span> * must implement this.<a name="line.30"></a>
 <span class="sourceLineNo">031</span> */<a name="line.31"></a>
 <span class="sourceLineNo">032</span>@InterfaceAudience.Private<a name="line.32"></a>
-<span class="sourceLineNo">033</span>public interface ExtendedCell extends RawCell, HeapSize, Cloneable {<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>  int CELL_NOT_BASED_ON_CHUNK = -1;<a name="line.35"></a>
+<span class="sourceLineNo">033</span>public interface ExtendedCell extends RawCell, HeapSize {<a name="line.33"></a>
+<span class="sourceLineNo">034</span>  int CELL_NOT_BASED_ON_CHUNK = -1;<a name="line.34"></a>
+<span class="sourceLineNo">035</span><a name="line.35"></a>
 <span class="sourceLineNo">036</span>  /**<a name="line.36"></a>
 <span class="sourceLineNo">037</span>   * Write this cell to an OutputStream in a {@link KeyValue} format.<a name="line.37"></a>
 <span class="sourceLineNo">038</span>   * &lt;br&gt; KeyValue format &lt;br&gt;<a name="line.38"></a>
@@ -96,85 +96,93 @@
 <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>  /**<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * Write this Cell into the given buf's offset in a {@link KeyValue} format.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * @param buf The buffer where to write the Cell.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * @param offset The offset within buffer, to write the Cell.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  default void write(ByteBuffer buf, int offset) {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    KeyValueUtil.appendTo(this, buf, offset, true);<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>   * Does a deep copy of the contents to a new memory area and returns it as a new cell.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   * @return The deep cloned cell<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   */<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  default ExtendedCell deepClone() {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    // When being added to the memstore, deepClone() is called and KeyValue has less heap overhead.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    return new KeyValue(this);<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>   * Extracts the id of the backing bytebuffer of this cell if it was obtained from fixed sized<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * chunks as in case of MemstoreLAB<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * @return the chunk id if the cell is backed by fixed sized Chunks, else return -1<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  default int getChunkId() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    return CELL_NOT_BASED_ON_CHUNK;<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>   * Sets with the given seqId.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @param seqId sequence ID<a name="line.119"></a>
+<span class="sourceLineNo">091</span>   * @return Serialized size (defaults to include tag length).<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   */<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  default int getSerializedSize() {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    return getSerializedSize(true);<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>  /**<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * Write this Cell into the given buf's offset in a {@link KeyValue} format.<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * @param buf The buffer where to write the Cell.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * @param offset The offset within buffer, to write the Cell.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   */<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  default void write(ByteBuffer buf, int offset) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    KeyValueUtil.appendTo(this, buf, offset, true);<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>  /**<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * Does a deep copy of the contents to a new memory area and returns it as a new cell.<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * @return The deep cloned cell<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  default ExtendedCell deepClone() {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    // When being added to the memstore, deepClone() is called and KeyValue has less heap overhead.<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    return new KeyValue(this);<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>   * Extracts the id of the backing bytebuffer of this cell if it was obtained from fixed sized<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * chunks as in case of MemstoreLAB<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @return the chunk id if the cell is backed by fixed sized Chunks, else return<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * {@link #CELL_NOT_BASED_ON_CHUNK}; i.e. -1.<a name="line.119"></a>
 <span class="sourceLineNo">120</span>   */<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  void setSequenceId(long seqId) throws IOException;<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  /**<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * Sets with the given timestamp.<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * @param ts timestamp<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   */<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  void setTimestamp(long ts) throws IOException;<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>   * Sets with the given timestamp.<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   * @param ts buffer containing the timestamp value<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   */<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  void setTimestamp(byte[] ts) throws IOException;<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>   * A region-specific unique monotonically increasing sequence ID given to each Cell. It always<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * exists for cells in the memstore but is not retained forever. It will be kept for<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   * {@link HConstants#KEEP_SEQID_PERIOD} days, but generally becomes irrelevant after the cell's<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   * row is no longer involved in any operations that require strict consistency.<a name="line.139"></a>
-<span class="sourceLineNo">140</span>   * @return seqId (always &amp;gt; 0 if exists), or 0 if it no longer exists<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   */<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  long getSequenceId();<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>
-<span class="sourceLineNo">145</span>   * Contiguous raw bytes representing tags that may start at any index in the containing array.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @return the tags byte array<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  byte[] getTagsArray();<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>   * @return the first offset where the tags start in the Cell<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  int getTagsOffset();<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>   * HBase internally uses 2 bytes to store tags length in Cell. As the tags length is always a<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * non-negative number, to make good use of the sign bit, the max of tags length is defined 2 *<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * Short.MAX_VALUE + 1 = 65535. As a result, the return type is int, because a short is not<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * capable of handling that. Please note that even if the return type is int, the max tags length<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * is far less than Integer.MAX_VALUE.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * @return the total length of the tags in the Cell.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  int getTagsLength();<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>   * @return The byte representation of the KeyValue.TYPE of this cell: one of Put, Delete, etc<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  byte getTypeByte();<a name="line.168"></a>
-<span class="sourceLineNo">169</span>}<a name="line.169"></a>
+<span class="sourceLineNo">121</span>  default int getChunkId() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    return CELL_NOT_BASED_ON_CHUNK;<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>  /**<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * Sets with the given seqId.<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * @param seqId sequence ID<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   */<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  void setSequenceId(long seqId) throws IOException;<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>   * Sets with the given timestamp.<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   * @param ts timestamp<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   */<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  void setTimestamp(long ts) throws IOException;<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>   * Sets with the given timestamp.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * @param ts buffer containing the timestamp value<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  void setTimestamp(byte[] ts) throws IOException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  /**<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * A region-specific unique monotonically increasing sequence ID given to each Cell. It always<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * exists for cells in the memstore but is not retained forever. It will be kept for<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * {@link HConstants#KEEP_SEQID_PERIOD} days, but generally becomes irrelevant after the cell's<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * row is no longer involved in any operations that require strict consistency.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * @return seqId (always &amp;gt; 0 if exists), or 0 if it no longer exists<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   */<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  long getSequenceId();<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>   * Contiguous raw bytes representing tags that may start at any index in the containing array.<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @return the tags byte array<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  byte[] getTagsArray();<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>   * @return the first offset where the tags start in the Cell<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  int getTagsOffset();<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>   * HBase internally uses 2 bytes to store tags length in Cell. As the tags length is always a<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * non-negative number, to make good use of the sign bit, the max of tags length is defined 2 *<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * Short.MAX_VALUE + 1 = 65535. As a result, the return type is int, because a short is not<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * capable of handling that. Please note that even if the return type is int, the max tags length<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * is far less than Integer.MAX_VALUE.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * @return the total length of the tags in the Cell.<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  int getTagsLength();<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 The byte representation of the KeyValue.TYPE of this cell: one of Put, Delete, etc<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   */<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  byte getTypeByte();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>}<a name="line.177"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/IndividualBytesFieldCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/IndividualBytesFieldCell.html b/devapidocs/src-html/org/apache/hadoop/hbase/IndividualBytesFieldCell.html
index d6a8ea3..6c6d359 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/IndividualBytesFieldCell.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/IndividualBytesFieldCell.html
@@ -32,7 +32,7 @@
 <span class="sourceLineNo">024</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.24"></a>
 <span class="sourceLineNo">025</span><a name="line.25"></a>
 <span class="sourceLineNo">026</span>@InterfaceAudience.Private<a name="line.26"></a>
-<span class="sourceLineNo">027</span>public class IndividualBytesFieldCell implements ExtendedCell {<a name="line.27"></a>
+<span class="sourceLineNo">027</span>public class IndividualBytesFieldCell implements ExtendedCell, Cloneable {<a name="line.27"></a>
 <span class="sourceLineNo">028</span><a name="line.28"></a>
 <span class="sourceLineNo">029</span>  private static final long FIXED_OVERHEAD = ClassSize.align(  // do alignment(padding gap)<a name="line.29"></a>
 <span class="sourceLineNo">030</span>        ClassSize.OBJECT              // object header<a name="line.30"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.KVComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.KVComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.KVComparator.html
index e97a6a9..6428b67 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.KVComparator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.KVComparator.html
@@ -84,7 +84,7 @@
 <span class="sourceLineNo">076</span> * length and actual tag bytes length.<a name="line.76"></a>
 <span class="sourceLineNo">077</span> */<a name="line.77"></a>
 <span class="sourceLineNo">078</span>@InterfaceAudience.Private<a name="line.78"></a>
-<span class="sourceLineNo">079</span>public class KeyValue implements ExtendedCell {<a name="line.79"></a>
+<span class="sourceLineNo">079</span>public class KeyValue implements ExtendedCell, Cloneable {<a name="line.79"></a>
 <span class="sourceLineNo">080</span>  private static final ArrayList&lt;Tag&gt; EMPTY_ARRAY_LIST = new ArrayList&lt;&gt;();<a name="line.80"></a>
 <span class="sourceLineNo">081</span><a name="line.81"></a>
 <span class="sourceLineNo">082</span>  private static final Logger LOG = LoggerFactory.getLogger(KeyValue.class);<a name="line.82"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html b/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html
index e97a6a9..6428b67 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html
@@ -84,7 +84,7 @@
 <span class="sourceLineNo">076</span> * length and actual tag bytes length.<a name="line.76"></a>
 <span class="sourceLineNo">077</span> */<a name="line.77"></a>
 <span class="sourceLineNo">078</span>@InterfaceAudience.Private<a name="line.78"></a>
-<span class="sourceLineNo">079</span>public class KeyValue implements ExtendedCell {<a name="line.79"></a>
+<span class="sourceLineNo">079</span>public class KeyValue implements ExtendedCell, Cloneable {<a name="line.79"></a>
 <span class="sourceLineNo">080</span>  private static final ArrayList&lt;Tag&gt; EMPTY_ARRAY_LIST = new ArrayList&lt;&gt;();<a name="line.80"></a>
 <span class="sourceLineNo">081</span><a name="line.81"></a>
 <span class="sourceLineNo">082</span>  private static final Logger LOG = LoggerFactory.getLogger(KeyValue.class);<a name="line.82"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.MetaComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.MetaComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.MetaComparator.html
index e97a6a9..6428b67 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.MetaComparator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.MetaComparator.html
@@ -84,7 +84,7 @@
 <span class="sourceLineNo">076</span> * length and actual tag bytes length.<a name="line.76"></a>
 <span class="sourceLineNo">077</span> */<a name="line.77"></a>
 <span class="sourceLineNo">078</span>@InterfaceAudience.Private<a name="line.78"></a>
-<span class="sourceLineNo">079</span>public class KeyValue implements ExtendedCell {<a name="line.79"></a>
+<span class="sourceLineNo">079</span>public class KeyValue implements ExtendedCell, Cloneable {<a name="line.79"></a>
 <span class="sourceLineNo">080</span>  private static final ArrayList&lt;Tag&gt; EMPTY_ARRAY_LIST = new ArrayList&lt;&gt;();<a name="line.80"></a>
 <span class="sourceLineNo">081</span><a name="line.81"></a>
 <span class="sourceLineNo">082</span>  private static final Logger LOG = LoggerFactory.getLogger(KeyValue.class);<a name="line.82"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.SamePrefixComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.SamePrefixComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.SamePrefixComparator.html
index e97a6a9..6428b67 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.SamePrefixComparator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.SamePrefixComparator.html
@@ -84,7 +84,7 @@
 <span class="sourceLineNo">076</span> * length and actual tag bytes length.<a name="line.76"></a>
 <span class="sourceLineNo">077</span> */<a name="line.77"></a>
 <span class="sourceLineNo">078</span>@InterfaceAudience.Private<a name="line.78"></a>
-<span class="sourceLineNo">079</span>public class KeyValue implements ExtendedCell {<a name="line.79"></a>
+<span class="sourceLineNo">079</span>public class KeyValue implements ExtendedCell, Cloneable {<a name="line.79"></a>
 <span class="sourceLineNo">080</span>  private static final ArrayList&lt;Tag&gt; EMPTY_ARRAY_LIST = new ArrayList&lt;&gt;();<a name="line.80"></a>
 <span class="sourceLineNo">081</span><a name="line.81"></a>
 <span class="sourceLineNo">082</span>  private static final Logger LOG = LoggerFactory.getLogger(KeyValue.class);<a name="line.82"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.Type.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.Type.html b/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.Type.html
index e97a6a9..6428b67 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.Type.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.Type.html
@@ -84,7 +84,7 @@
 <span class="sourceLineNo">076</span> * length and actual tag bytes length.<a name="line.76"></a>
 <span class="sourceLineNo">077</span> */<a name="line.77"></a>
 <span class="sourceLineNo">078</span>@InterfaceAudience.Private<a name="line.78"></a>
-<span class="sourceLineNo">079</span>public class KeyValue implements ExtendedCell {<a name="line.79"></a>
+<span class="sourceLineNo">079</span>public class KeyValue implements ExtendedCell, Cloneable {<a name="line.79"></a>
 <span class="sourceLineNo">080</span>  private static final ArrayList&lt;Tag&gt; EMPTY_ARRAY_LIST = new ArrayList&lt;&gt;();<a name="line.80"></a>
 <span class="sourceLineNo">081</span><a name="line.81"></a>
 <span class="sourceLineNo">082</span>  private static final Logger LOG = LoggerFactory.getLogger(KeyValue.class);<a name="line.82"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.html b/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.html
index e97a6a9..6428b67 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/KeyValue.html
@@ -84,7 +84,7 @@
 <span class="sourceLineNo">076</span> * length and actual tag bytes length.<a name="line.76"></a>
 <span class="sourceLineNo">077</span> */<a name="line.77"></a>
 <span class="sourceLineNo">078</span>@InterfaceAudience.Private<a name="line.78"></a>
-<span class="sourceLineNo">079</span>public class KeyValue implements ExtendedCell {<a name="line.79"></a>
+<span class="sourceLineNo">079</span>public class KeyValue implements ExtendedCell, Cloneable {<a name="line.79"></a>
 <span class="sourceLineNo">080</span>  private static final ArrayList&lt;Tag&gt; EMPTY_ARRAY_LIST = new ArrayList&lt;&gt;();<a name="line.80"></a>
 <span class="sourceLineNo">081</span><a name="line.81"></a>
 <span class="sourceLineNo">082</span>  private static final Logger LOG = LoggerFactory.getLogger(KeyValue.class);<a name="line.82"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/ServerName.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ServerName.html b/devapidocs/src-html/org/apache/hadoop/hbase/ServerName.html
index ba6f5fd..f9b4f3e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ServerName.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ServerName.html
@@ -241,186 +241,190 @@
 <span class="sourceLineNo">233</span>    return this.address.getHostname();<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>  public int getPort() {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    return this.address.getPort();<a name="line.237"></a>
+<span class="sourceLineNo">236</span>  public String getHostnameLowerCase() {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    return this.address.getHostname().toLowerCase(Locale.ROOT);<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>  public long getStartcode() {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    return startcode;<a name="line.241"></a>
+<span class="sourceLineNo">240</span>  public int getPort() {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    return this.address.getPort();<a name="line.241"></a>
 <span class="sourceLineNo">242</span>  }<a name="line.242"></a>
 <span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * For internal use only.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * @param hostName<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * @param port<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * @param startcode<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * @return Server name made of the concatenation of hostname, port and<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * startcode formatted as &lt;code&gt;&amp;lt;hostname&amp;gt; ',' &amp;lt;port&amp;gt; ',' &amp;lt;startcode&amp;gt;&lt;/code&gt;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @deprecated Since 2.0. Use {@link ServerName#valueOf(String, int, long)} instead.<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   */<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  @Deprecated<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  // TODO: Make this private in hbase-3.0.<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  static String getServerName(String hostName, int port, long startcode) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    final StringBuilder name = new StringBuilder(hostName.length() + 1 + 5 + 1 + 13);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    name.append(hostName.toLowerCase(Locale.ROOT));<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    name.append(SERVERNAME_SEPARATOR);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    name.append(port);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    name.append(SERVERNAME_SEPARATOR);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    name.append(startcode);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    return name.toString();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  }<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>   * @param hostAndPort String in form of &amp;lt;hostname&amp;gt; ':' &amp;lt;port&amp;gt;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * @param startcode<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @return Server name made of the concatenation of hostname, port and<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * startcode formatted as &lt;code&gt;&amp;lt;hostname&amp;gt; ',' &amp;lt;port&amp;gt; ',' &amp;lt;startcode&amp;gt;&lt;/code&gt;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * @deprecated Since 2.0. Use {@link ServerName#valueOf(String, long)} instead.<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   */<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  @Deprecated<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  public static String getServerName(final String hostAndPort,<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      final long startcode) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    int index = hostAndPort.indexOf(":");<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    if (index &lt;= 0) throw new IllegalArgumentException("Expected &lt;hostname&gt; ':' &lt;port&gt;");<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return getServerName(hostAndPort.substring(0, index),<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      Integer.parseInt(hostAndPort.substring(index + 1)), startcode);<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>   * @return Hostname and port formatted as described at<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * {@link Addressing#createHostAndPortStr(String, int)}<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * @deprecated Since 2.0. Use {@link #getAddress()} instead.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   */<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  @Deprecated<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  public String getHostAndPort() {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    return this.address.toString();<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>  public Address getAddress() {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    return this.address;<a name="line.292"></a>
+<span class="sourceLineNo">244</span>  public long getStartcode() {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    return startcode;<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>   * For internal use only.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * @param hostName<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * @param port<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * @param startcode<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   * @return Server name made of the concatenation of hostname, port and<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * startcode formatted as &lt;code&gt;&amp;lt;hostname&amp;gt; ',' &amp;lt;port&amp;gt; ',' &amp;lt;startcode&amp;gt;&lt;/code&gt;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   * @deprecated Since 2.0. Use {@link ServerName#valueOf(String, int, long)} instead.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   */<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  @Deprecated<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  // TODO: Make this private in hbase-3.0.<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  static String getServerName(String hostName, int port, long startcode) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    final StringBuilder name = new StringBuilder(hostName.length() + 1 + 5 + 1 + 13);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    name.append(hostName.toLowerCase(Locale.ROOT));<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    name.append(SERVERNAME_SEPARATOR);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    name.append(port);<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    name.append(SERVERNAME_SEPARATOR);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    name.append(startcode);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    return name.toString();<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>   * @param hostAndPort String in form of &amp;lt;hostname&amp;gt; ':' &amp;lt;port&amp;gt;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * @param startcode<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * @return Server name made of the concatenation of hostname, port and<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * startcode formatted as &lt;code&gt;&amp;lt;hostname&amp;gt; ',' &amp;lt;port&amp;gt; ',' &amp;lt;startcode&amp;gt;&lt;/code&gt;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * @deprecated Since 2.0. Use {@link ServerName#valueOf(String, long)} instead.<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  @Deprecated<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  public static String getServerName(final String hostAndPort,<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      final long startcode) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    int index = hostAndPort.indexOf(":");<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    if (index &lt;= 0) throw new IllegalArgumentException("Expected &lt;hostname&gt; ':' &lt;port&gt;");<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    return getServerName(hostAndPort.substring(0, index),<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      Integer.parseInt(hostAndPort.substring(index + 1)), startcode);<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>  /**<a name="line.285"></a>
+<span class="sourceLineNo">286</span>   * @return Hostname and port formatted as described at<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * {@link Addressing#createHostAndPortStr(String, int)}<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * @deprecated Since 2.0. Use {@link #getAddress()} instead.<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  @Deprecated<a name="line.290"></a>
+<span class="sourceLineNo">291</span>  public String getHostAndPort() {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return this.address.toString();<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>   * @param serverName ServerName in form specified by {@link #getServerName()}<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @return The server start code parsed from &lt;code&gt;servername&lt;/code&gt;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @deprecated Since 2.0. Use instance of ServerName to pull out start code.<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  @Deprecated<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  public static long getServerStartcodeFromServerName(final String serverName) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    int index = serverName.lastIndexOf(SERVERNAME_SEPARATOR);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    return Long.parseLong(serverName.substring(index + 1));<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>  /**<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   * Utility method to excise the start code from a server name<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * @param inServerName full server name<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * @return server name less its start code<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * @deprecated Since 2.0. Use {@link #getAddress()}<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   */<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  @Deprecated<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public static String getServerNameLessStartCode(String inServerName) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    if (inServerName != null &amp;&amp; inServerName.length() &gt; 0) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      int index = inServerName.lastIndexOf(SERVERNAME_SEPARATOR);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      if (index &gt; 0) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        return inServerName.substring(0, index);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    return inServerName;<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 int compareTo(ServerName other) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    int compare;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    if (other == null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      return -1;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    if (this.getHostname() == null) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      if (other.getHostname() != null) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        return 1;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    } else {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      if (other.getHostname() == null) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>        return -1;<a name="line.335"></a>
+<span class="sourceLineNo">295</span>  public Address getAddress() {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return this.address;<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>  /**<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @param serverName ServerName in form specified by {@link #getServerName()}<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * @return The server start code parsed from &lt;code&gt;servername&lt;/code&gt;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * @deprecated Since 2.0. Use instance of ServerName to pull out start code.<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   */<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  @Deprecated<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public static long getServerStartcodeFromServerName(final String serverName) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    int index = serverName.lastIndexOf(SERVERNAME_SEPARATOR);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return Long.parseLong(serverName.substring(index + 1));<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>   * Utility method to excise the start code from a server name<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * @param inServerName full server name<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * @return server name less its start code<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * @deprecated Since 2.0. Use {@link #getAddress()}<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   */<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  @Deprecated<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  public static String getServerNameLessStartCode(String inServerName) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    if (inServerName != null &amp;&amp; inServerName.length() &gt; 0) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      int index = inServerName.lastIndexOf(SERVERNAME_SEPARATOR);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      if (index &gt; 0) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        return inServerName.substring(0, index);<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>    return inServerName;<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 compareTo(ServerName other) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    int compare;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    if (other == null) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      return -1;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    if (this.getHostname() == null) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      if (other.getHostname() != null) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        return 1;<a name="line.335"></a>
 <span class="sourceLineNo">336</span>      }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      compare = this.getHostname().compareToIgnoreCase(other.getHostname());<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      if (compare != 0) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        return compare;<a name="line.339"></a>
+<span class="sourceLineNo">337</span>    } else {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      if (other.getHostname() == null) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        return -1;<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>    compare = this.getPort() - other.getPort();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    if (compare != 0) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      return compare;<a name="line.344"></a>
+<span class="sourceLineNo">341</span>      compare = this.getHostname().compareToIgnoreCase(other.getHostname());<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      if (compare != 0) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        return compare;<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>    return Long.compare(this.getStartcode(), other.getStartcode());<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 hashCode() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    return getServerName().hashCode();<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 boolean equals(Object o) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    if (this == o) return true;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    if (o == null) return false;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    if (!(o instanceof ServerName)) return false;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    return this.compareTo((ServerName)o) == 0;<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>   * @param left<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * @param right<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * @return True if &lt;code&gt;other&lt;/code&gt; has same hostname and port.<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   */<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  public static boolean isSameAddress(final ServerName left,<a name="line.367"></a>
-<span class="sourceLineNo">368</span>                                      final ServerName right) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    // TODO: Make this left.getAddress().equals(right.getAddress())<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    if (left == null) return false;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    if (right == null) return false;<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    return left.getHostname().compareToIgnoreCase(right.getHostname()) == 0 &amp;&amp;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      left.getPort() == right.getPort();<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>   * Use this method instantiating a {@link ServerName} from bytes<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   * gotten from a call to {@link #getVersionedBytes()}.  Will take care of the<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * case where bytes were written by an earlier version of hbase.<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   * @param versionedBytes Pass bytes gotten from a call to {@link #getVersionedBytes()}<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * @return A ServerName instance.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * @see #getVersionedBytes()<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   */<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  public static ServerName parseVersionedServerName(final byte [] versionedBytes) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    // Version is a short.<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    short version = Bytes.toShort(versionedBytes);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    if (version == VERSION) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      int length = versionedBytes.length - Bytes.SIZEOF_SHORT;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      return valueOf(Bytes.toString(versionedBytes, Bytes.SIZEOF_SHORT, length));<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    // Presume the bytes were written with an old version of hbase and that the<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    // bytes are actually a String of the form "'&lt;hostname&gt;' ':' '&lt;port&gt;'".<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    return valueOf(Bytes.toString(versionedBytes), NON_STARTCODE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
-<span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span>  /**<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * @param str Either an instance of {@link ServerName#toString()} or a<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * "'&amp;lt;hostname&amp;gt;' ':' '&amp;lt;port&amp;gt;'".<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * @return A ServerName instance.<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   */<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  public static ServerName parseServerName(final String str) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return SERVERNAME_PATTERN.matcher(str).matches()? valueOf(str) :<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        valueOf(str, NON_STARTCODE);<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><a name="line.406"></a>
-<span class="sourceLineNo">407</span>  /**<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   * @return true if the String follows the pattern of {@link ServerName#toString()}, false<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   *  otherwise.<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  public static boolean isFullServerName(final String str){<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    if (str == null ||str.isEmpty()) return false;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    return SERVERNAME_PATTERN.matcher(str).matches();<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">346</span>    compare = this.getPort() - other.getPort();<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    if (compare != 0) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      return compare;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    return Long.compare(this.getStartcode(), other.getStartcode());<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>  @Override<a name="line.353"></a>
+<span class="sourceLineNo">354</span>  public int hashCode() {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    return getServerName().hashCode();<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  }<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span>  @Override<a name="line.358"></a>
+<span class="sourceLineNo">359</span>  public boolean equals(Object o) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    if (this == o) return true;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    if (o == null) return false;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    if (!(o instanceof ServerName)) return false;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    return this.compareTo((ServerName)o) == 0;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  }<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>   * @param left<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * @param right<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * @return True if &lt;code&gt;other&lt;/code&gt; has same hostname and port.<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   */<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  public static boolean isSameAddress(final ServerName left,<a name="line.371"></a>
+<span class="sourceLineNo">372</span>                                      final ServerName right) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    // TODO: Make this left.getAddress().equals(right.getAddress())<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    if (left == null) return false;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    if (right == null) return false;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    return left.getHostname().compareToIgnoreCase(right.getHostname()) == 0 &amp;&amp;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      left.getPort() == right.getPort();<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>  /**<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * Use this method instantiating a {@link ServerName} from bytes<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * gotten from a call to {@link #getVersionedBytes()}.  Will take care of the<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * case where bytes were written by an earlier version of hbase.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * @param versionedBytes Pass bytes gotten from a call to {@link #getVersionedBytes()}<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * @return A ServerName instance.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   * @see #getVersionedBytes()<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   */<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  public static ServerName parseVersionedServerName(final byte [] versionedBytes) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    // Version is a short.<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    short version = Bytes.toShort(versionedBytes);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    if (version == VERSION) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      int length = versionedBytes.length - Bytes.SIZEOF_SHORT;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return valueOf(Bytes.toString(versionedBytes, Bytes.SIZEOF_SHORT, length));<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    // Presume the bytes were written with an old version of hbase and that the<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    // bytes are actually a String of the form "'&lt;hostname&gt;' ':' '&lt;port&gt;'".<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    return valueOf(Bytes.toString(versionedBytes), NON_STARTCODE);<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>  /**<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   * @param str Either an instance of {@link ServerName#toString()} or a<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * "'&amp;lt;hostname&amp;gt;' ':' '&amp;lt;port&amp;gt;'".<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * @return A ServerName instance.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  public static ServerName parseServerName(final String str) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    return SERVERNAME_PATTERN.matcher(str).matches()? valueOf(str) :<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        valueOf(str, NON_STARTCODE);<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><a name="line.410"></a>
+<span class="sourceLineNo">411</span>  /**<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * @return true if the String follows the pattern of {@link ServerName#toString()}, false<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   *  otherwise.<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  public static boolean isFullServerName(final String str){<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    if (str == null ||str.isEmpty()) return false;<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    return SERVERNAME_PATTERN.matcher(str).matches();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>}<a name="line.419"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index bd7bb32..0dfeb21 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -16,11 +16,11 @@
 <span class="sourceLineNo">008</span>@InterfaceAudience.Private<a name="line.8"></a>
 <span class="sourceLineNo">009</span>public class Version {<a name="line.9"></a>
 <span class="sourceLineNo">010</span>  public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
-<span class="sourceLineNo">011</span>  public static final String revision = "5721150c6d910ef95c30c0dd3126f58b6096f1b5";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "f3d1c021de2264301f68eadb9ef126ff83d7ef53";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Wed May 23 14:39:54 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Thu May 24 14:39:22 UTC 2018";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "git://jenkins-websites1.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String srcChecksum = "a5a73d9f267b5d087f582dbbf9e506e1";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "9cf2b1576b925f830d9095fedcae0329";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.CachingBlockReader.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.CachingBlockReader.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.CachingBlockReader.html
index 3ae4214..2559531 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.CachingBlockReader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.CachingBlockReader.html
@@ -340,8 +340,8 @@
 <span class="sourceLineNo">332</span>        try {<a name="line.332"></a>
 <span class="sourceLineNo">333</span>          ostream.setDropBehind(shouldDropBehind &amp;&amp; cacheConf.shouldDropBehindCompaction());<a name="line.333"></a>
 <span class="sourceLineNo">334</span>        } catch (UnsupportedOperationException uoe) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          if (LOG.isTraceEnabled()) LOG.trace("Unable to set drop behind on " + path, uoe);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>          else if (LOG.isDebugEnabled()) LOG.debug("Unable to set drop behind on " + path);<a name="line.336"></a>
+<span class="sourceLineNo">335</span>          LOG.trace("Unable to set drop behind on {}", path, uoe);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          LOG.debug("Unable to set drop behind on {}", path.getName());<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>      return new HFileWriterImpl(conf, cacheConf, path, ostream, comparator, fileContext);<a name="line.339"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.FileInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.FileInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.FileInfo.html
index 3ae4214..2559531 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.FileInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.FileInfo.html
@@ -340,8 +340,8 @@
 <span class="sourceLineNo">332</span>        try {<a name="line.332"></a>
 <span class="sourceLineNo">333</span>          ostream.setDropBehind(shouldDropBehind &amp;&amp; cacheConf.shouldDropBehindCompaction());<a name="line.333"></a>
 <span class="sourceLineNo">334</span>        } catch (UnsupportedOperationException uoe) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          if (LOG.isTraceEnabled()) LOG.trace("Unable to set drop behind on " + path, uoe);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>          else if (LOG.isDebugEnabled()) LOG.debug("Unable to set drop behind on " + path);<a name="line.336"></a>
+<span class="sourceLineNo">335</span>          LOG.trace("Unable to set drop behind on {}", path, uoe);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          LOG.debug("Unable to set drop behind on {}", path.getName());<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>      return new HFileWriterImpl(conf, cacheConf, path, ostream, comparator, fileContext);<a name="line.339"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.Reader.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.Reader.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.Reader.html
index 3ae4214..2559531 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.Reader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.Reader.html
@@ -340,8 +340,8 @@
 <span class="sourceLineNo">332</span>        try {<a name="line.332"></a>
 <span class="sourceLineNo">333</span>          ostream.setDropBehind(shouldDropBehind &amp;&amp; cacheConf.shouldDropBehindCompaction());<a name="line.333"></a>
 <span class="sourceLineNo">334</span>        } catch (UnsupportedOperationException uoe) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          if (LOG.isTraceEnabled()) LOG.trace("Unable to set drop behind on " + path, uoe);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>          else if (LOG.isDebugEnabled()) LOG.debug("Unable to set drop behind on " + path);<a name="line.336"></a>
+<span class="sourceLineNo">335</span>          LOG.trace("Unable to set drop behind on {}", path, uoe);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          LOG.debug("Unable to set drop behind on {}", path.getName());<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>      return new HFileWriterImpl(conf, cacheConf, path, ostream, comparator, fileContext);<a name="line.339"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.Writer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.Writer.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.Writer.html
index 3ae4214..2559531 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.Writer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.Writer.html
@@ -340,8 +340,8 @@
 <span class="sourceLineNo">332</span>        try {<a name="line.332"></a>
 <span class="sourceLineNo">333</span>          ostream.setDropBehind(shouldDropBehind &amp;&amp; cacheConf.shouldDropBehindCompaction());<a name="line.333"></a>
 <span class="sourceLineNo">334</span>        } catch (UnsupportedOperationException uoe) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          if (LOG.isTraceEnabled()) LOG.trace("Unable to set drop behind on " + path, uoe);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>          else if (LOG.isDebugEnabled()) LOG.debug("Unable to set drop behind on " + path);<a name="line.336"></a>
+<span class="sourceLineNo">335</span>          LOG.trace("Unable to set drop behind on {}", path, uoe);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          LOG.debug("Unable to set drop behind on {}", path.getName());<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>      return new HFileWriterImpl(conf, cacheConf, path, ostream, comparator, fileContext);<a name="line.339"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.WriterFactory.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.WriterFactory.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.WriterFactory.html
index 3ae4214..2559531 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.WriterFactory.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.WriterFactory.html
@@ -340,8 +340,8 @@
 <span class="sourceLineNo">332</span>        try {<a name="line.332"></a>
 <span class="sourceLineNo">333</span>          ostream.setDropBehind(shouldDropBehind &amp;&amp; cacheConf.shouldDropBehindCompaction());<a name="line.333"></a>
 <span class="sourceLineNo">334</span>        } catch (UnsupportedOperationException uoe) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          if (LOG.isTraceEnabled()) LOG.trace("Unable to set drop behind on " + path, uoe);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>          else if (LOG.isDebugEnabled()) LOG.debug("Unable to set drop behind on " + path);<a name="line.336"></a>
+<span class="sourceLineNo">335</span>          LOG.trace("Unable to set drop behind on {}", path, uoe);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          LOG.debug("Unable to set drop behind on {}", path.getName());<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>      return new HFileWriterImpl(conf, cacheConf, path, ostream, comparator, fileContext);<a name="line.339"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.html
index 3ae4214..2559531 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFile.html
@@ -340,8 +340,8 @@
 <span class="sourceLineNo">332</span>        try {<a name="line.332"></a>
 <span class="sourceLineNo">333</span>          ostream.setDropBehind(shouldDropBehind &amp;&amp; cacheConf.shouldDropBehindCompaction());<a name="line.333"></a>
 <span class="sourceLineNo">334</span>        } catch (UnsupportedOperationException uoe) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          if (LOG.isTraceEnabled()) LOG.trace("Unable to set drop behind on " + path, uoe);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>          else if (LOG.isDebugEnabled()) LOG.debug("Unable to set drop behind on " + path);<a name="line.336"></a>
+<span class="sourceLineNo">335</span>          LOG.trace("Unable to set drop behind on {}", path, uoe);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          LOG.debug("Unable to set drop behind on {}", path.getName());<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>      return new HFileWriterImpl(conf, cacheConf, path, ostream, comparator, fileContext);<a name="line.339"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html
index 65b5edb..7f42212 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html
@@ -1413,7 +1413,7 @@
 <span class="sourceLineNo">1405</span>    ArrayListMultimap&lt;String, ServerName&gt; serversByHostname = ArrayListMultimap.create();<a name="line.1405"></a>
 <span class="sourceLineNo">1406</span>    for (ServerName server : servers) {<a name="line.1406"></a>
 <span class="sourceLineNo">1407</span>      assignments.put(server, new ArrayList&lt;&gt;());<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostname(), server);<a name="line.1408"></a>
+<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostnameLowerCase(), server);<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>    // Collection of the hostnames that used to have regions<a name="line.1411"></a>
@@ -1434,13 +1434,13 @@
 <span class="sourceLineNo">1426</span>      ServerName oldServerName = entry.getValue();<a name="line.1426"></a>
 <span class="sourceLineNo">1427</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1427"></a>
 <span class="sourceLineNo">1428</span>      if (oldServerName != null) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostname());<a name="line.1429"></a>
+<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1429"></a>
 <span class="sourceLineNo">1430</span>      }<a name="line.1430"></a>
 <span class="sourceLineNo">1431</span>      if (localServers.isEmpty()) {<a name="line.1431"></a>
 <span class="sourceLineNo">1432</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>        randomAssignRegions.add(region);<a name="line.1433"></a>
 <span class="sourceLineNo">1434</span>        if (oldServerName != null) {<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostname());<a name="line.1435"></a>
+<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1435"></a>
 <span class="sourceLineNo">1436</span>        }<a name="line.1436"></a>
 <span class="sourceLineNo">1437</span>      } else if (localServers.size() == 1) {<a name="line.1437"></a>
 <span class="sourceLineNo">1438</span>        // the usual case - one new server on same host<a name="line.1438"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html
index 65b5edb..7f42212 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html
@@ -1413,7 +1413,7 @@
 <span class="sourceLineNo">1405</span>    ArrayListMultimap&lt;String, ServerName&gt; serversByHostname = ArrayListMultimap.create();<a name="line.1405"></a>
 <span class="sourceLineNo">1406</span>    for (ServerName server : servers) {<a name="line.1406"></a>
 <span class="sourceLineNo">1407</span>      assignments.put(server, new ArrayList&lt;&gt;());<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostname(), server);<a name="line.1408"></a>
+<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostnameLowerCase(), server);<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>    // Collection of the hostnames that used to have regions<a name="line.1411"></a>
@@ -1434,13 +1434,13 @@
 <span class="sourceLineNo">1426</span>      ServerName oldServerName = entry.getValue();<a name="line.1426"></a>
 <span class="sourceLineNo">1427</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1427"></a>
 <span class="sourceLineNo">1428</span>      if (oldServerName != null) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostname());<a name="line.1429"></a>
+<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1429"></a>
 <span class="sourceLineNo">1430</span>      }<a name="line.1430"></a>
 <span class="sourceLineNo">1431</span>      if (localServers.isEmpty()) {<a name="line.1431"></a>
 <span class="sourceLineNo">1432</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>        randomAssignRegions.add(region);<a name="line.1433"></a>
 <span class="sourceLineNo">1434</span>        if (oldServerName != null) {<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostname());<a name="line.1435"></a>
+<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1435"></a>
 <span class="sourceLineNo">1436</span>        }<a name="line.1436"></a>
 <span class="sourceLineNo">1437</span>      } else if (localServers.size() == 1) {<a name="line.1437"></a>
 <span class="sourceLineNo">1438</span>        // the usual case - one new server on same host<a name="line.1438"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html
index 65b5edb..7f42212 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html
@@ -1413,7 +1413,7 @@
 <span class="sourceLineNo">1405</span>    ArrayListMultimap&lt;String, ServerName&gt; serversByHostname = ArrayListMultimap.create();<a name="line.1405"></a>
 <span class="sourceLineNo">1406</span>    for (ServerName server : servers) {<a name="line.1406"></a>
 <span class="sourceLineNo">1407</span>      assignments.put(server, new ArrayList&lt;&gt;());<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostname(), server);<a name="line.1408"></a>
+<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostnameLowerCase(), server);<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>    // Collection of the hostnames that used to have regions<a name="line.1411"></a>
@@ -1434,13 +1434,13 @@
 <span class="sourceLineNo">1426</span>      ServerName oldServerName = entry.getValue();<a name="line.1426"></a>
 <span class="sourceLineNo">1427</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1427"></a>
 <span class="sourceLineNo">1428</span>      if (oldServerName != null) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostname());<a name="line.1429"></a>
+<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1429"></a>
 <span class="sourceLineNo">1430</span>      }<a name="line.1430"></a>
 <span class="sourceLineNo">1431</span>      if (localServers.isEmpty()) {<a name="line.1431"></a>
 <span class="sourceLineNo">1432</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>        randomAssignRegions.add(region);<a name="line.1433"></a>
 <span class="sourceLineNo">1434</span>        if (oldServerName != null) {<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostname());<a name="line.1435"></a>
+<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1435"></a>
 <span class="sourceLineNo">1436</span>        }<a name="line.1436"></a>
 <span class="sourceLineNo">1437</span>      } else if (localServers.size() == 1) {<a name="line.1437"></a>
 <span class="sourceLineNo">1438</span>        // the usual case - one new server on same host<a name="line.1438"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html
index 65b5edb..7f42212 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html
@@ -1413,7 +1413,7 @@
 <span class="sourceLineNo">1405</span>    ArrayListMultimap&lt;String, ServerName&gt; serversByHostname = ArrayListMultimap.create();<a name="line.1405"></a>
 <span class="sourceLineNo">1406</span>    for (ServerName server : servers) {<a name="line.1406"></a>
 <span class="sourceLineNo">1407</span>      assignments.put(server, new ArrayList&lt;&gt;());<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostname(), server);<a name="line.1408"></a>
+<span class="sourceLineNo">1408</span>      serversByHostname.put(server.getHostnameLowerCase(), server);<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>    // Collection of the hostnames that used to have regions<a name="line.1411"></a>
@@ -1434,13 +1434,13 @@
 <span class="sourceLineNo">1426</span>      ServerName oldServerName = entry.getValue();<a name="line.1426"></a>
 <span class="sourceLineNo">1427</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1427"></a>
 <span class="sourceLineNo">1428</span>      if (oldServerName != null) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostname());<a name="line.1429"></a>
+<span class="sourceLineNo">1429</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1429"></a>
 <span class="sourceLineNo">1430</span>      }<a name="line.1430"></a>
 <span class="sourceLineNo">1431</span>      if (localServers.isEmpty()) {<a name="line.1431"></a>
 <span class="sourceLineNo">1432</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>        randomAssignRegions.add(region);<a name="line.1433"></a>
 <span class="sourceLineNo">1434</span>        if (oldServerName != null) {<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostname());<a name="line.1435"></a>
+<span class="sourceLineNo">1435</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1435"></a>
 <span class="sourceLineNo">1436</span>        }<a name="line.1436"></a>
 <span class="sourceLineNo">1437</span>      } else if (localServers.size() == 1) {<a name="line.1437"></a>
 <span class="sourceLineNo">1438</span>        // the usual case - one new server on same host<a name="line.1438"></a>


[46/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 3d61404..ecd60d1 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180523" />
+    <meta name="Date-Revision-yyyymmdd" content="20180524" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -281,10 +281,10 @@
 <th><img src="images/icon_warning_sml.gif" alt="" />&#160;Warnings</th>
 <th><img src="images/icon_error_sml.gif" alt="" />&#160;Errors</th></tr>
 <tr class="b">
-<td>3613</td>
+<td>3616</td>
 <td>0</td>
 <td>0</td>
-<td>15866</td></tr></table></div>
+<td>15863</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -309,590 +309,590 @@
 <td>0</td>
 <td>2</td></tr>
 <tr class="a">
+<td><a href="#org.apache.hadoop.hbase.BBKVComparator.java">org/apache/hadoop/hbase/BBKVComparator.java</a></td>
+<td>0</td>
+<td>0</td>
+<td>1</td></tr>
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ByteBufferKeyOnlyKeyValue.java">org/apache/hadoop/hbase/ByteBufferKeyOnlyKeyValue.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.Cell.java">org/apache/hadoop/hbase/Cell.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.CellBuilderFactory.java">org/apache/hadoop/hbase/CellBuilderFactory.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.CellComparator.java">org/apache/hadoop/hbase/CellComparator.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.CellComparatorImpl.java">org/apache/hadoop/hbase/CellComparatorImpl.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.CellScanner.java">org/apache/hadoop/hbase/CellScanner.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.CellUtil.java">org/apache/hadoop/hbase/CellUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>67</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ChoreService.java">org/apache/hadoop/hbase/ChoreService.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.ClassFinder.java">org/apache/hadoop/hbase/ClassFinder.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.ClusterId.java">org/apache/hadoop/hbase/ClusterId.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.ClusterManager.java">org/apache/hadoop/hbase/ClusterManager.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.ClusterStatus.java">org/apache/hadoop/hbase/ClusterStatus.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.CompoundConfiguration.java">org/apache/hadoop/hbase/CompoundConfiguration.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.CoordinatedStateManager.java">org/apache/hadoop/hbase/CoordinatedStateManager.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.java">org/apache/hadoop/hbase/Coprocessor.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.DistributedHBaseCluster.java">org/apache/hadoop/hbase/DistributedHBaseCluster.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.DoNotRetryIOException.java">org/apache/hadoop/hbase/DoNotRetryIOException.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.DroppedSnapshotException.java">org/apache/hadoop/hbase/DroppedSnapshotException.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.ExtendedCell.java">org/apache/hadoop/hbase/ExtendedCell.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.GenericTestUtils.java">org/apache/hadoop/hbase/GenericTestUtils.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.HBaseClassTestRuleChecker.java">org/apache/hadoop/hbase/HBaseClassTestRuleChecker.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.HBaseCluster.java">org/apache/hadoop/hbase/HBaseCluster.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.HBaseClusterManager.java">org/apache/hadoop/hbase/HBaseClusterManager.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.HBaseCommonTestingUtility.java">org/apache/hadoop/hbase/HBaseCommonTestingUtility.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.HBaseConfiguration.java">org/apache/hadoop/hbase/HBaseConfiguration.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.HBaseTestCase.java">org/apache/hadoop/hbase/HBaseTestCase.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.HBaseTestingUtility.java">org/apache/hadoop/hbase/HBaseTestingUtility.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>259</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.HColumnDescriptor.java">org/apache/hadoop/hbase/HColumnDescriptor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>40</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.HFilePerformanceEvaluation.java">org/apache/hadoop/hbase/HFilePerformanceEvaluation.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.HRegionInfo.java">org/apache/hadoop/hbase/HRegionInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>55</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.HRegionLocation.java">org/apache/hadoop/hbase/HRegionLocation.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.HTableDescriptor.java">org/apache/hadoop/hbase/HTableDescriptor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>36</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.HTestConst.java">org/apache/hadoop/hbase/HTestConst.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.HadoopShimsImpl.java">org/apache/hadoop/hbase/HadoopShimsImpl.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.HealthChecker.java">org/apache/hadoop/hbase/HealthChecker.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.IndividualBytesFieldCell.java">org/apache/hadoop/hbase/IndividualBytesFieldCell.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.IntegrationTestBackupRestore.java">org/apache/hadoop/hbase/IntegrationTestBackupRestore.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.IntegrationTestBase.java">org/apache/hadoop/hbase/IntegrationTestBase.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.IntegrationTestDDLMasterFailover.java">org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.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.IntegrationTestIngest.java">org/apache/hadoop/hbase/IntegrationTestIngest.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.IntegrationTestIngestWithACL.java">org/apache/hadoop/hbase/IntegrationTestIngestWithACL.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.IntegrationTestIngestWithEncryption.java">org/apache/hadoop/hbase/IntegrationTestIngestWithEncryption.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.IntegrationTestIngestWithMOB.java">org/apache/hadoop/hbase/IntegrationTestIngestWithMOB.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.IntegrationTestIngestWithVisibilityLabels.java">org/apache/hadoop/hbase/IntegrationTestIngestWithVisibilityLabels.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.IntegrationTestManyRegions.java">org/apache/hadoop/hbase/IntegrationTestManyRegions.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.IntegrationTestMetaReplicas.java">org/apache/hadoop/hbase/IntegrationTestMetaReplicas.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.IntegrationTestRegionReplicaPerf.java">org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.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.IntegrationTestRegionReplicaReplication.java">org/apache/hadoop/hbase/IntegrationTestRegionReplicaReplication.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.IntegrationTestingUtility.java">org/apache/hadoop/hbase/IntegrationTestingUtility.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.KeyValue.java">org/apache/hadoop/hbase/KeyValue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>117</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.KeyValueTestUtil.java">org/apache/hadoop/hbase/KeyValueTestUtil.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.KeyValueUtil.java">org/apache/hadoop/hbase/KeyValueUtil.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.LocalHBaseCluster.java">org/apache/hadoop/hbase/LocalHBaseCluster.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.MetaMockingUtil.java">org/apache/hadoop/hbase/MetaMockingUtil.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.MetaMutationAnnotation.java">org/apache/hadoop/hbase/MetaMutationAnnotation.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.MetaTableAccessor.java">org/apache/hadoop/hbase/MetaTableAccessor.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.MiniHBaseCluster.java">org/apache/hadoop/hbase/MiniHBaseCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>21</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.MockRegionServerServices.java">org/apache/hadoop/hbase/MockRegionServerServices.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.MultithreadedTestUtil.java">org/apache/hadoop/hbase/MultithreadedTestUtil.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.NamespaceDescriptor.java">org/apache/hadoop/hbase/NamespaceDescriptor.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.NotAllMetaRegionsOnlineException.java">org/apache/hadoop/hbase/NotAllMetaRegionsOnlineException.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.NotServingRegionException.java">org/apache/hadoop/hbase/NotServingRegionException.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.PerformanceEvaluation.java">org/apache/hadoop/hbase/PerformanceEvaluation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>37</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.PerformanceEvaluationCommons.java">org/apache/hadoop/hbase/PerformanceEvaluationCommons.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.PrivateCellUtil.java">org/apache/hadoop/hbase/PrivateCellUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>67</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.QosTestHelper.java">org/apache/hadoop/hbase/QosTestHelper.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.RESTApiClusterManager.java">org/apache/hadoop/hbase/RESTApiClusterManager.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.RegionLoad.java">org/apache/hadoop/hbase/RegionLoad.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.RegionLocations.java">org/apache/hadoop/hbase/RegionLocations.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.RegionStateListener.java">org/apache/hadoop/hbase/RegionStateListener.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.ResourceChecker.java">org/apache/hadoop/hbase/ResourceChecker.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.ScanPerformanceEvaluation.java">org/apache/hadoop/hbase/ScanPerformanceEvaluation.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.ScheduledChore.java">org/apache/hadoop/hbase/ScheduledChore.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.Server.java">org/apache/hadoop/hbase/Server.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.ServerLoad.java">org/apache/hadoop/hbase/ServerLoad.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.ServerName.java">org/apache/hadoop/hbase/ServerName.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.SplitLogCounters.java">org/apache/hadoop/hbase/SplitLogCounters.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.SplitLogTask.java">org/apache/hadoop/hbase/SplitLogTask.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.StripeCompactionsPerformanceEvaluation.java">org/apache/hadoop/hbase/StripeCompactionsPerformanceEvaluation.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.TableDescriptors.java">org/apache/hadoop/hbase/TableDescriptors.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.TableInfoMissingException.java">org/apache/hadoop/hbase/TableInfoMissingException.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.TableName.java">org/apache/hadoop/hbase/TableName.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.TableNotDisabledException.java">org/apache/hadoop/hbase/TableNotDisabledException.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.TableNotEnabledException.java">org/apache/hadoop/hbase/TableNotEnabledException.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.TableNotFoundException.java">org/apache/hadoop/hbase/TableNotFoundException.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.TagType.java">org/apache/hadoop/hbase/TagType.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.TestCheckTestClasses.java">org/apache/hadoop/hbase/TestCheckTestClasses.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.TestClassFinder.java">org/apache/hadoop/hbase/TestClassFinder.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.TestClientClusterStatus.java">org/apache/hadoop/hbase/TestClientClusterStatus.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.TestClientOperationTimeout.java">org/apache/hadoop/hbase/TestClientOperationTimeout.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.TestClusterPortAssignment.java">org/apache/hadoop/hbase/TestClusterPortAssignment.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.TestFSTableDescriptorForceCreation.java">org/apache/hadoop/hbase/TestFSTableDescriptorForceCreation.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.TestGlobalMemStoreSize.java">org/apache/hadoop/hbase/TestGlobalMemStoreSize.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.TestHBaseConfiguration.java">org/apache/hadoop/hbase/TestHBaseConfiguration.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.TestHBaseTestingUtility.java">org/apache/hadoop/hbase/TestHBaseTestingUtility.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.TestHColumnDescriptor.java">org/apache/hadoop/hbase/TestHColumnDescriptor.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.TestHColumnDescriptorDefaultVersions.java">org/apache/hadoop/hbase/TestHColumnDescriptorDefaultVersions.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.TestHTableDescriptor.java">org/apache/hadoop/hbase/TestHTableDescriptor.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.TestIOFencing.java">org/apache/hadoop/hbase/TestIOFencing.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.TestInfoServers.java">org/apache/hadoop/hbase/TestInfoServers.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.TestJMXConnectorServer.java">org/apache/hadoop/hbase/TestJMXConnectorServer.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.TestKeyValue.java">org/apache/hadoop/hbase/TestKeyValue.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.TestLocalHBaseCluster.java">org/apache/hadoop/hbase/TestLocalHBaseCluster.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.TestMetaTableAccessor.java">org/apache/hadoop/hbase/TestMetaTableAccessor.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.TestMetaTableAccessorNoCluster.java">org/apache/hadoop/hbase/TestMetaTableAccessorNoCluster.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.TestMetaTableLocator.java">org/apache/hadoop/hbase/TestMetaTableLocator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>33</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.TestMovedRegionsCleaner.java">org/apache/hadoop/hbase/TestMovedRegionsCleaner.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.TestMultiVersions.java">org/apache/hadoop/hbase/TestMultiVersions.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.TestNamespace.java">org/apache/hadoop/hbase/TestNamespace.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.TestNodeHealthCheckChore.java">org/apache/hadoop/hbase/TestNodeHealthCheckChore.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.TestPartialResultsFromClientSide.java">org/apache/hadoop/hbase/TestPartialResultsFromClientSide.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.TestPerformanceEvaluation.java">org/apache/hadoop/hbase/TestPerformanceEvaluation.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.TestRegionRebalancing.java">org/apache/hadoop/hbase/TestRegionRebalancing.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.TestSerialization.java">org/apache/hadoop/hbase/TestSerialization.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.TestServerSideScanMetricsFromClientSide.java">org/apache/hadoop/hbase/TestServerSideScanMetricsFromClientSide.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.TestStochasticBalancerJmxMetrics.java">org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
-<td><a href="#org.apache.hadoop.hbase.TestTagRewriteCell.java">org/apache/hadoop/hbase/TestTagRewriteCell.java</a></td>
-<td>0</td>
-<td>0</td>
-<td>1</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.TestTimeout.java">org/apache/hadoop/hbase/TestTimeout.java</a></td>
 <td>0</td>
@@ -3457,7 +3457,7 @@
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFile.java">org/apache/hadoop/hbase/io/hfile/HFile.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>38</td></tr>
+<td>36</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.HFileBlock.java">org/apache/hadoop/hbase/io/hfile/HFileBlock.java</a></td>
 <td>0</td>
@@ -7947,7 +7947,7 @@
 <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>3</td></tr>
+<td>2</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationEndpoint.java">org/apache/hadoop/hbase/replication/ReplicationEndpoint.java</a></td>
 <td>0</td>
@@ -10244,7 +10244,7 @@
 <tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_blocks.html#NeedBraces">NeedBraces</a></td>
-<td>1928</td>
+<td>1925</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td>coding</td>
@@ -10307,7 +10307,7 @@
 <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>1230</td>
+<td>1232</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td></td>
@@ -10337,12 +10337,12 @@
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
 <ul>
 <li>offset: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>798</td>
+<td>783</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>3809</td>
+<td>3823</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td>misc</td>
@@ -10360,7 +10360,7 @@
 <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>1617</td>
+<td>1616</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td></td>
@@ -10616,6 +10616,21 @@
 <td>'if' construct must use '{}'s.</td>
 <td>90</td></tr></table></div>
 <div class="section">
+<h3 id="org.apache.hadoop.hbase.BBKVComparator.java">org/apache/hadoop/hbase/BBKVComparator.java</h3>
+<table border="0" class="table table-striped">
+<tr class="b">
+<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>imports</td>
+<td>ImportOrder</td>
+<td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
+<td>24</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">
@@ -10704,7 +10719,7 @@
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>56</td></tr></table></div>
+<td>57</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CellComparatorImpl.java">org/apache/hadoop/hbase/CellComparatorImpl.java</h3>
 <table border="0" class="table table-striped">
@@ -10716,10 +10731,10 @@
 <th>Line</th></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>67</td></tr></table></div>
+<td>imports</td>
+<td>ImportOrder</td>
+<td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
+<td>27</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.CellScanner.java">org/apache/hadoop/hbase/CellScanner.java</h3>
 <table border="0" class="table table-striped">
@@ -14494,7 +14509,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 26 has parse error. Missed HTML close tag 'arg'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>44</td></tr></table></div>
 <div class="section">
@@ -15130,7 +15145,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 4 has parse error. Missed HTML close tag 'pre'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>59</td></tr></table></div>
 <div class="section">
@@ -16885,7 +16900,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 19 has parse error. Details: no viable alternative at input '&lt;code&gt;\n   *   List&lt;Future&lt;' while parsing HTML_TAG</td>
 <td>167</td></tr></table></div>
 <div class="section">
@@ -16983,199 +16998,199 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>461</td></tr>
+<td>481</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' have incorrect indentation level 6, expected level should be 4.</td>
-<td>541</td></tr>
+<td>571</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>679</td></tr>
+<td>711</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>679</td></tr>
+<td>711</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>679</td></tr>
+<td>711</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>1123</td></tr>
+<td>1173</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>1124</td></tr>
+<td>1174</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>1128</td></tr>
+<td>1178</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>1137</td></tr>
+<td>1187</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 103).</td>
-<td>1196</td></tr>
+<td>1246</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 106).</td>
-<td>1199</td></tr>
+<td>1249</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>1291</td></tr>
+<td>1340</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>1293</td></tr>
+<td>1342</td></tr>
 <tr class="b">
 <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>1298</td></tr>
+<td>1348</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>1454</td></tr>
+<td>1477</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>1460</td></tr>
+<td>1483</td></tr>
 <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>1718</td></tr>
+<td>1741</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>1765</td></tr>
+<td>1789</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>1874</td></tr>
+<td>1899</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>2029</td></tr>
+<td>2031</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>2149</td></tr>
+<td>2168</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>2193</td></tr>
+<td>2223</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>2234</td></tr>
+<td>2265</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>2349</td></tr>
+<td>2380</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>2350</td></tr>
+<td>2381</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>2382</td></tr>
+<td>2413</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>2428</td></tr>
+<td>2466</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
-<td>2442</td></tr>
+<td>2480</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 118).</td>
-<td>2446</td></tr>
+<td>2484</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>2450</td></tr>
+<td>2488</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
-<td>Method length is 279 lines (max allowed is 150).</td>
-<td>2479</td></tr>
+<td>Method length is 305 lines (max allowed is 150).</td>
+<td>2517</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>2619</td></tr>
+<td>2683</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
-<td>2648</td></tr></table></div>
+<td>2712</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.PerformanceEvaluationCommons.java">org/apache/hadoop/hbase/PerformanceEvaluationCommons.java</h3>
 <table border="0" class="table table-striped">
@@ -18000,103 +18015,103 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>246</td></tr>
+<td>250</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>247</td></tr>
+<td>251</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>248</td></tr>
+<td>252</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>250</td></tr>
+<td>254</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>267</td></tr>
+<td>271</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>269</td></tr>
+<td>273</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>276</td></tr>
+<td>280</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>356</td></tr>
+<td>360</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>361</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>
+<td>362</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>363</td></tr>
+<td>367</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>364</td></tr>
+<td>368</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>370</td></tr>
+<td>374</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>371</td></tr>
+<td>375</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>398</td></tr>
+<td>402</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>409</td></tr>
+<td>413</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>412</td></tr></table></div>
+<td>416</td></tr></table></div>
 <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">
@@ -19748,21 +19763,6 @@
 <td>'if' construct must use '{}'s.</td>
 <td>276</td></tr></table></div>
 <div class="section">
-<h3 id="org.apache.hadoop.hbase.TestTagRewriteCell.java">org/apache/hadoop/hbase/TestTagRewriteCell.java</h3>
-<table border="0" class="table table-striped">
-<tr class="b">
-<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>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 102).</td>
-<td>52</td></tr></table></div>
-<div class="section">
 <h3 id="org.apache.hadoop.hbase.TestTimeout.java">org/apache/hadoop/hbase/TestTimeout.java</h3>
 <table border="0" class="table table-striped">
 <tr class="b">
@@ -19891,7 +19891,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 2 has parse error. Unrecognized error from ANTLR parser: null</td>
 <td>83</td></tr>
 <tr class="b">
@@ -33838,7 +33838,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 37 has parse error. Details: no viable alternative at input '&lt;ColumnFamily,' while parsing HTML_ELEMENT</td>
 <td>29</td></tr></table></div>
 <div class="section">
@@ -48693,18 +48693,6 @@
 <td>244</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>335</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>336</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
@@ -50149,7 +50137,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 24 has parse error. Details: no viable alternative at input '&lt;key,' while parsing HTML_ELEMENT</td>
 <td>25</td></tr>
 <tr class="a">
@@ -53737,7 +53725,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 2 has parse error. Unrecognized error from ANTLR parser: null</td>
 <td>587</td></tr>
 <tr class="b">
@@ -73354,7 +73342,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 60 has parse error. Missed HTML close tag 'Comparable'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>29</td></tr>
 <tr class="b">
@@ -77536,7 +77524,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 0 has parse error. Unrecognized error from ANTLR parser: null</td>
 <td>74</td></tr>
 <tr class="b">
@@ -81447,403 +81435,403 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1376</td></tr>
+<td>1375</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'initialCountPercentage' have incorrect indentation level 6, expected level should be 8.</td>
-<td>1582</td></tr>
+<td>1581</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>1684</td></tr>
+<td>1683</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 have incorrect indentation level 16, expected level should be 18.</td>
-<td>1741</td></tr>
+<td>1740</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>1770</td></tr>
+<td>1769</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>1825</td></tr>
+<td>1824</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'HConstants' have incorrect indentation level 6, expected level should be 8.</td>
-<td>1877</td></tr>
+<td>1876</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'conf' have incorrect indentation level 4, expected level should be 6.</td>
-<td>1891</td></tr>
+<td>1890</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'&quot;hbase.regionserver.wal.max.splitters&quot;' have incorrect indentation level 4, expected level should be 6.</td>
-<td>1912</td></tr>
+<td>1911</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 have incorrect indentation level 4, expected level should be 6.</td>
-<td>1925</td></tr>
+<td>1924</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>1930</td></tr>
+<td>1929</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>1931</td></tr>
+<td>1930</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>1932</td></tr>
+<td>1931</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>1933</td></tr>
+<td>1932</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>1934</td></tr>
+<td>1933</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>1935</td></tr>
+<td>1934</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>1936</td></tr>
+<td>1935</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 have incorrect indentation level 4, expected level should be 6.</td>
-<td>1941</td></tr>
+<td>1940</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>2025</td></tr>
+<td>2024</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>2038</td></tr>
+<td>2037</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>2296</td></tr>
+<td>2295</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>2429</td></tr>
+<td>2426</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>2430</td></tr>
+<td>2427</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>2431</td></tr>
+<td>2428</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>2432</td></tr>
+<td>2429</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>2433</td></tr>
+<td>2430</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>2434</td></tr>
+<td>2431</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>2435</td></tr>
+<td>2432</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>2436</td></tr>
+<td>2433</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>2451</td></tr>
+<td>2448</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>2467</td></tr>
+<td>2464</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>2476</td></tr>
+<td>2473</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>2574</td></tr>
+<td>2571</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>2588</td></tr>
+<td>2585</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>2590</td></tr>
+<td>2587</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>2677</td></tr>
+<td>2674</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>2682</td></tr>
+<td>2679</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>2988</td></tr>
+<td>2985</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>2989</td></tr>
+<td>2986</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>3026</td></tr>
+<td>3023</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 have incorrect indentation level 5, expected level should be 4.</td>
-<td>3031</td></tr>
+<td>3028</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'synchronized' have incorrect indentation level 5, expected level should be 4.</td>
-<td>3032</td></tr>
+<td>3029</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' have incorrect indentation level 7, expected level should be 6.</td>
-<td>3033</td></tr>
+<td>3030</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 have incorrect indentation level 9, expected level should be 8.</td>
-<td>3034</td></tr>
+<td>3031</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' have incorrect indentation level 9, expected level should be 8.</td>
-<td>3035</td></tr>
+<td>3032</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 have incorrect indentation level 11, expected level should be 10.</td>
-<td>3036</td></tr>
+<td>3033</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 rcurly' have incorrect indentation level 9, expected level should be 8.</td>
-<td>3037</td></tr>
+<td>3034</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 rcurly' have incorrect indentation level 7, expected level should be 6.</td>
-<td>3038</td></tr>
+<td>3035</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'synchronized rcurly' have incorrect indentation level 5, expected level should be 4.</td>
-<td>3039</td></tr>
+<td>3036</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 have incorrect indentation level 5, expected level should be 4.</td>
-<td>3040</td></tr>
+<td>3037</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' have incorrect indentation level 3, expected level should be 2.</td>
-<td>3041</td></tr>
+<td>3038</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>3192</td></tr>
+<td>3189</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>3225</td></tr>
+<td>3222</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>3252</td></tr>
+<td>3249</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>3266</td></tr>
+<td>3263</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>3374</td></tr>
+<td>3371</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def rcurly' have incorrect indentation level 5, expected level should be 4.</td>
-<td>3396</td></tr>
+<td>3393</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 have incorrect indentation level 8, expected level should be 4.</td>
-<td>3468</td></tr>
+<td>3465</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 48 should have line break after.</td>
-<td>3489</td></tr>
+<td>3486</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 46 should have line break after.</td>
-<td>3490</td></tr>
+<td>3487</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>3537</td></tr>
+<td>3534</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' have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>3557</td></tr>
+<td>3554</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' have incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>3559</td></tr>
+<td>3556</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 have incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
-<td>3560</td></tr>
+<td>3557</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 rcurly' have incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>3561</td></tr>
+<td>3558</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' have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>3562</td></tr>
+<td>3559</td></tr>
 <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' have incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>3563</td></tr></table></div>
+<td>3560</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.java">org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.java</h3>
 <table border="0" class="table table-striped">
@@ -87436,7 +87424,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 33 has parse error. Missed HTML close tag 'number'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>127</td></tr>
 <tr class="b">
@@ -94092,41 +94080,35 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>66</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>135</td></tr></table></div>
+<td>67</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.ReplicationEndpoint.java">org/apache/hadoop/hbase/replication/ReplicationEndpoint.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>29</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.replication.regionserver.MetricsSource' 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>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 37 should have line break after.</td>
 <td>114</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>
@@ -94135,13 +94117,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.ReplicationException.java">org/apache/hadoop/hbase/replication/ReplicationException.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>
@@ -94150,13 +94132,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.SystemTableWALEntryFilter.java">org/apache/hadoop/hbase/replication/SystemTableWALEntryFilter.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>
@@ -94165,79 +94147,79 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.TestMasterReplication.java">org/apache/hadoop/hbase/replication/TestMasterReplication.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 have incorrect indentation level 14, expected level should be one of the following: 12, 27.</td>
 <td>231</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 have incorrect indentation level 10, expected level should be one of the following: 8, 37.</td>
 <td>242</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 have incorrect indentation level 10, expected level should be one of the following: 8, 44.</td>
 <td>245</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 have incorrect indentation level 14, expected level should be one of the following: 12, 27.</td>
 <td>345</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 have incorrect indentation level 10, expected level should be one of the following: 8, 37.</td>
 <td>365</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 have incorrect indentation level 10, expected level should be one of the following: 8, 44.</td>
 <td>369</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 have incorrect indentation level 14, expected level should be one of the following: 12, 27.</td>
 <td>401</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 have incorrect indentation level 10, expected level should be one of the following: 8, 37.</td>
 <td>411</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' have incorrect indentation level 10, expected level should be one of the following: 6, 8.</td>
 <td>697</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 have incorrect indentation level 12, expected level should be one of the following: 8, 10.</td>
 <td>699</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' have incorrect indentation level 10, expected level should be one of the following: 6, 8.</td>
 <td>700</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>
@@ -94246,37 +94228,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.TestMultiSlaveReplication.java">org/apache/hadoop/hbase/replication/TestMultiSlaveReplication.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.apache.hadoop.hbase.*.</td>
 <td>30</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' have incorrect indentation level 10, expected level should be one of the following: 6, 8.</td>
 <td>221</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 have incorrect indentation level 12, expected level should be one of the following: 8, 10.</td>
 <td>223</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' have incorrect indentation level 10, expected level should be one of the following: 6, 8.</td>
 <td>224</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>
@@ -94285,25 +94267,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.TestPerTableCFReplication.java">org/apache/hadoop/hbase/replication/TestPerTableCFReplication.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>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 1, expected level should be 2.</td>
 <td>279</td></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>
@@ -94312,13 +94294,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.TestReplicationChangingPeerRegionservers.java">org/apache/hadoop/hbase/replication/TestReplicationChangingPeerRegionservers.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>
@@ -94327,13 +94309,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.TestReplicationDisableInactivePeer.java">org/apache/hadoop/hbase/replication/TestReplicationDisableInactivePeer.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>
@@ -94342,49 +94324,49 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.TestReplicationEndpoint.java">org/apache/hadoop/hbase/replication/TestReplicationEndpoint.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 114).</td>
 <td>252</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>281</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>291</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>307</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>317</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>318</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>
@@ -94393,13 +94375,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.TestReplicationKillMasterRSCompressed.java">org/apache/hadoop/hbase/replication/TestReplicationKillMasterRSCompressed.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>
@@ -94408,13 +94390,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.TestReplicationWithTags.java">org/apache/hadoop/hbase/replication/TestReplicationWithTags.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>
@@ -94423,61 +94405,61 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.TestVerifyReplication.java">org/apache/hadoop/hbase/replication/TestVerifyReplication.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 have incorrect indentation level 8, expected level should be one of the following: 6, 26.</td>
 <td>392</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 have incorrect indentation level 8, expected level should be one of the following: 6, 26.</td>
 <td>397</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 have incorrect indentation level 8, expected level should be one of the following: 6, 26.</td>
 <td>398</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 have incorrect indentation level 8, expected level should be one of the following: 6, 35.</td>
 <td>439</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 have incorrect indentation level 8, expected level should be one of the following: 6, 35.</td>
 <td>440</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 have incorrect indentation level 8, expected level should be one of the following: 6, 35.</td>
 <td>441</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 have incorrect indentation level 8, expected level should be one of the following: 6, 26.</td>
 <td>480</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 have incorrect indentation level 8, expected level should be one of the following: 6, 26.</td>
 <td>481</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>
@@ -94486,19 +94468,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.WALCellFilter.java">org/apache/hadoop/hbase/replication/WALCellFilter.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.wal.WAL.Entry' 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>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -94507,19 +94489,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.WALEntryFilter.java">org/apache/hadoop/hbase/replication/WALEntryFilter.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.HBaseInterfaceAudience' import.</td>
 <td>21</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>
@@ -94528,25 +94510,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.ZKReplicationQueueStorage.java">org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.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 104).</td>
 <td>250</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 have incorrect indentation level 10, expected level should be 8.</td>
 <td>565</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>
@@ -94555,13 +94537,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner.java">org/apache/hadoop/hbase/replication/master/ReplicationLogCleaner.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>
@@ -94570,43 +94552,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.DumpReplicationQueues.java">org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.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 105).</td>
 <td>68</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>101</td></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>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>151</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>152</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>
@@ -94615,25 +94597,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.HFileReplicator.java">org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.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.io.FileNotFoundException' import.</td>
 <td>15</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.client.Connection' import.</td>
 <td>45</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>
@@ -94642,31 +94624,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource.java">org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.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>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
 <td>39</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>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 116).</td>
 <td>80</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>
@@ -94675,13 +94657,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl.java">org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceImpl.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>
@@ -94690,13 +94672,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl.java">org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.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>annotation</td>
 <td>MissingDeprecated</td>
@@ -94705,19 +94687,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.MetricsSink.java">org/apache/hadoop/hbase/replication/regionserver/MetricsSink.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.CompatibilitySingletonFactory' import.</td>
 <td>22</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>
@@ -94726,19 +94708,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.MetricsSource.java">org/apache/hadoop/hbase/replication/regionserver/MetricsSource.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.CompatibilitySingletonFactory' 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>sizes</td>
 <td>LineLength</td>
@@ -94747,25 +94729,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.RegionReplicaReplicationEndpoint.java">org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.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>354</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 have incorrect indentation level 11, expected level should be 10.</td>
 <td>502</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>
@@ -94774,19 +94756,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.Replication.java">org/apache/hadoop/hbase/replication/regionserver/Replication.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>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>NonEmptyAtclauseDescription</td>
@@ -94795,43 +94777,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.ReplicationLoad.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.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.ArrayList' 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.hadoop.hbase.util.EnvironmentEdgeManager' import.</td>
 <td>29</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 h

<TRUNCATED>

[39/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
index be246fb..d8857c0 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
@@ -2426,7 +2426,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>movedRegions</h4>
-<pre>protected&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="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3413">movedRegions</a></pre>
+<pre>protected&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="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3410">movedRegions</a></pre>
 </li>
 </ul>
 <a name="TIMEOUT_REGION_MOVED">
@@ -2435,7 +2435,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TIMEOUT_REGION_MOVED</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3417">TIMEOUT_REGION_MOVED</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3414">TIMEOUT_REGION_MOVED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.TIMEOUT_REGION_MOVED">Constant Field Values</a></dd>
@@ -2840,7 +2840,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>reportRegionSizesForQuotas</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1219">reportRegionSizesForQuotas</a>(<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizeStore)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1218">reportRegionSizesForQuotas</a>(<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizeStore)</pre>
 <div class="block">Reports the given map of Regions and their size on the filesystem to the active Master.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -2858,7 +2858,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>buildReportAndSend</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1262">buildReportAndSend</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService.BlockingInterface&nbsp;rss,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1261">buildReportAndSend</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService.BlockingInterface&nbsp;rss,
                         <a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizeStore)
                  throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Builds the region size report and sends it to the master. Upon successful sending of the
@@ -2878,7 +2878,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>buildRegionSpaceUseReportRequest</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUseReportRequest&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1279">buildRegionSpaceUseReportRequest</a>(<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizes)</pre>
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUseReportRequest&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1278">buildRegionSpaceUseReportRequest</a>(<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizes)</pre>
 <div class="block">Builds a <code>RegionServerStatusProtos.RegionSpaceUseReportRequest</code> protobuf message from the region size map.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -2894,7 +2894,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>convertRegionSize</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1295">convertRegionSize</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1294">convertRegionSize</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                                                                                                             <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>&nbsp;sizeInBytes)</pre>
 <div class="block">Converts a pair of <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a> and <code>long</code> into a <code>RegionServerStatusProtos.RegionSpaceUse</code>
  protobuf message.</div>
@@ -2913,7 +2913,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>buildServerLoad</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.ServerLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1302">buildServerLoad</a>(long&nbsp;reportStartTime,
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.ServerLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1301">buildServerLoad</a>(long&nbsp;reportStartTime,
                                                                                                  long&nbsp;reportEndTime)
                                                                                           throws <a href="https://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>
@@ -2928,7 +2928,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRegionsAsPrintableString</h4>
-<pre><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/regionserver/HRegionServer.html#line.1373">getOnlineRegionsAsPrintableString</a>()</pre>
+<pre><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/regionserver/HRegionServer.html#line.1372">getOnlineRegionsAsPrintableString</a>()</pre>
 </li>
 </ul>
 <a name="waitOnAllRegionsToClose-boolean-">
@@ -2937,7 +2937,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>waitOnAllRegionsToClose</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1385">waitOnAllRegionsToClose</a>(boolean&nbsp;abort)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1384">waitOnAllRegionsToClose</a>(boolean&nbsp;abort)</pre>
 <div class="block">Wait on regions close.</div>
 </li>
 </ul>
@@ -2947,7 +2947,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>sleep</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1439">sleep</a>(long&nbsp;millis)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1438">sleep</a>(long&nbsp;millis)</pre>
 </li>
 </ul>
 <a name="shutdownWAL-boolean-">
@@ -2956,7 +2956,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownWAL</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1450">shutdownWAL</a>(boolean&nbsp;close)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1449">shutdownWAL</a>(boolean&nbsp;close)</pre>
 </li>
 </ul>
 <a name="handleReportForDutyResponse-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse-">
@@ -2965,7 +2965,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>handleReportForDutyResponse</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1471">handleReportForDutyResponse</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse&nbsp;c)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1470">handleReportForDutyResponse</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse&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>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2979,7 +2979,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeMemStoreChunkCreator</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1565">initializeMemStoreChunkCreator</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1564">initializeMemStoreChunkCreator</a>()</pre>
 </li>
 </ul>
 <a name="startHeapMemoryManager--">
@@ -2988,7 +2988,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>startHeapMemoryManager</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1586">startHeapMemoryManager</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1585">startHeapMemoryManager</a>()</pre>
 </li>
 </ul>
 <a name="createMyEphemeralNode--">
@@ -2997,7 +2997,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>createMyEphemeralNode</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1594">createMyEphemeralNode</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1593">createMyEphemeralNode</a>()
                             throws org.apache.zookeeper.KeeperException,
                                    <a href="https://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>
@@ -3013,7 +3013,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteMyEphemeralNode</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1602">deleteMyEphemeralNode</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1601">deleteMyEphemeralNode</a>()
                             throws org.apache.zookeeper.KeeperException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3027,7 +3027,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerAccounting</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1607">getRegionServerAccounting</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1606">getRegionServerAccounting</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRegionServerAccounting--">getRegionServerAccounting</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -3042,7 +3042,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionLoad</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1619">createRegionLoad</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1618">createRegionLoad</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
                                                                                                   org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad.Builder&nbsp;regionLoadBldr,
                                                                                                   org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.Builder&nbsp;regionSpecifier)
                                                                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3058,7 +3058,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionLoad</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1687">createRegionLoad</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;encodedRegionName)
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1686">createRegionLoad</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;encodedRegionName)
                                                                                                   throws <a href="https://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="paramLabel">Parameters:</span></dt>
@@ -3076,7 +3076,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>isOnline</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1796">isOnline</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1795">isOnline</a>()</pre>
 <div class="block">Report the status of the server. A server is online once all the startup is
  completed (setting up filesystem, starting executorService threads, etc.). This
  method is designed mostly to be useful in tests.</div>
@@ -3092,7 +3092,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>setupWALAndReplication</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1804">setupWALAndReplication</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1803">setupWALAndReplication</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">Setup WAL log and replication if enabled. Replication setup is done in here because it wants to
  be hooked up to WAL.</div>
@@ -3108,7 +3108,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>startReplicationService</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1827">startReplicationService</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1826">startReplicationService</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">Start up replication source and sink handlers.</div>
 <dl>
@@ -3123,7 +3123,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerMetrics</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1842">getRegionServerMetrics</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1841">getRegionServerMetrics</a>()</pre>
 </li>
 </ul>
 <a name="getMasterAddressTracker--">
@@ -3132,7 +3132,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterAddressTracker</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterAddressTracker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1849">getMasterAddressTracker</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterAddressTracker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1848">getMasterAddressTracker</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Master address tracker instance.</dd>
@@ -3145,7 +3145,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>startServices</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1867">startServices</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1866">startServices</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>
@@ -3159,7 +3159,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeThreads</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1968">initializeThreads</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1967">initializeThreads</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>
@@ -3173,7 +3173,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>registerConfigurationObservers</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2015">registerConfigurationObservers</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2014">registerConfigurationObservers</a>()</pre>
 </li>
 </ul>
 <a name="putUpWebUI--">
@@ -3182,7 +3182,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>putUpWebUI</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2027">putUpWebUI</a>()
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2026">putUpWebUI</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">Puts up the webui.</div>
 <dl>
@@ -3199,7 +3199,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>isHealthy</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2081">isHealthy</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2080">isHealthy</a>()</pre>
 </li>
 </ul>
 <a name="getWALs--">
@@ -3208,7 +3208,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALs</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="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2099">getWALs</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;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2098">getWALs</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">Specified by:</span></dt>
@@ -3227,7 +3227,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getWAL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2104">getWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2103">getWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="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></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -3246,7 +3246,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getWalRoller</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LogRoller.html" title="class in org.apache.hadoop.hbase.regionserver">LogRoller</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2112">getWalRoller</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LogRoller.html" title="class in org.apache.hadoop.hbase.regionserver">LogRoller</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2111">getWalRoller</a>()</pre>
 </li>
 </ul>
 <a name="getConnection--">
@@ -3255,7 +3255,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getConnection</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2117">getConnection</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2116">getConnection</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getConnection--">Server</a></code></span></div>
 <div class="block">Returns a reference to the servers' connection.
 
@@ -3273,7 +3273,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterConnection</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2122">getClusterConnection</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2121">getClusterConnection</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getClusterConnection--">Server</a></code></span></div>
 <div class="block">Returns a reference to the servers' cluster connection. Prefer <a href="../../../../../org/apache/hadoop/hbase/Server.html#getConnection--"><code>Server.getConnection()</code></a>.
 
@@ -3291,7 +3291,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaTableLocator</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html" title="class in org.apache.hadoop.hbase.zookeeper">MetaTableLocator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2127">getMetaTableLocator</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html" title="class in org.apache.hadoop.hbase.zookeeper">MetaTableLocator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2126">getMetaTableLocator</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getMetaTableLocator--">Server</a></code></span></div>
 <div class="block">Returns instance of <a href="../../../../../org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html" title="class in org.apache.hadoop.hbase.zookeeper"><code>MetaTableLocator</code></a>
  running inside this server. This MetaServerLocator is started and stopped by server, clients
@@ -3310,7 +3310,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2132">stop</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;msg)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2131">stop</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;msg)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#stop-java.lang.String-">Stoppable</a></code></span></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -3328,7 +3328,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2142">stop</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;msg,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2141">stop</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;msg,
                  boolean&nbsp;force,
                  <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</pre>
 <div class="block">Stops the regionserver.</div>
@@ -3346,7 +3346,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForServerOnline</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2164">waitForServerOnline</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2163">waitForServerOnline</a>()</pre>
 </li>
 </ul>
 <a name="postOpenDeployTasks-org.apache.hadoop.hbase.regionserver.RegionServerServices.PostOpenDeployContext-">
@@ -3355,7 +3355,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>postOpenDeployTasks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2178">postOpenDeployTasks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.PostOpenDeployContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.PostOpenDeployContext</a>&nbsp;context)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2177">postOpenDeployTasks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.PostOpenDeployContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.PostOpenDeployContext</a>&nbsp;context)
                          throws org.apache.zookeeper.KeeperException,
                                 <a href="https://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 interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#postOpenDeployTasks-org.apache.hadoop.hbase.regionserver.RegionServerServices.PostOpenDeployContext-">RegionServerServices</a></code></span></div>
@@ -3378,7 +3378,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>reportRegionStateTransition</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2211">reportRegionStateTransition</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.RegionStateTransitionContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.RegionStateTransitionContext</a>&nbsp;context)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2210">reportRegionStateTransition</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.RegionStateTransitionContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.RegionStateTransitionContext</a>&nbsp;context)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#reportRegionStateTransition-org.apache.hadoop.hbase.regionserver.RegionServerServices.RegionStateTransitionContext-">RegionServerServices</a></code></span></div>
 <div class="block">Notify master that a handler requests to change a region state</div>
 <dl>
@@ -3393,7 +3393,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>triggerFlushInPrimaryRegion</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2310">triggerFlushInPrimaryRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2309">triggerFlushInPrimaryRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
 <div class="block">Trigger a flush in the primary region replica if this region is a secondary replica. Does not
  block this thread. See RegionReplicaFlushHandler for details.</div>
 </li>
@@ -3404,7 +3404,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getRpcServer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html" title="interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2332">getRpcServer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html" title="interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2331">getRpcServer</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRpcServer--">RegionServerServices</a></code></span></div>
 <div class="block">Returns a reference to the region server's RPC server</div>
 <dl>
@@ -3419,7 +3419,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSRpcServices</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2337">getRSRpcServices</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2336">getRSRpcServices</a>()</pre>
 </li>
 </ul>
 <a name="abort-java.lang.String-java.lang.Throwable-">
@@ -3428,7 +3428,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2352">abort</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;reason,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2351">abort</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;reason,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</pre>
 <div class="block">Cause the server to exit without closing the regions it is serving, the log
  it is using and without notifying the master. Used unit testing and on
@@ -3448,7 +3448,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2397">abort</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;reason)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2394">abort</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;reason)</pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#abort-java.lang.String-java.lang.Throwable-"><code>abort(String, Throwable)</code></a></dd>
@@ -3461,7 +3461,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>isAborted</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2402">isAborted</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2399">isAborted</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">Abortable</a></code></span></div>
 <div class="block">Check if the server or client was aborted.</div>
 <dl>
@@ -3478,7 +3478,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>kill</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2412">kill</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2409">kill</a>()</pre>
 </li>
 </ul>
 <a name="sendShutdownInterrupt--">
@@ -3487,7 +3487,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>sendShutdownInterrupt</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2420">sendShutdownInterrupt</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2417">sendShutdownInterrupt</a>()</pre>
 <div class="block">Called on stop/abort before closing the cluster connection and meta locator.</div>
 </li>
 </ul>
@@ -3497,7 +3497,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>stopServiceThreads</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2427">stopServiceThreads</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2424">stopServiceThreads</a>()</pre>
 <div class="block">Wait on all threads to finish. Presumption is that all closes and stops
  have already been called.</div>
 </li>
@@ -3508,7 +3508,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationSourceService</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2470">getReplicationSourceService</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2467">getReplicationSourceService</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return the object that implements the replication
@@ -3522,7 +3522,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationSinkService</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2478">getReplicationSinkService</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2475">getReplicationSinkService</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return the object that implements the replication
@@ -3536,7 +3536,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionServerStatusStub</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2491">createRegionServerStatusStub</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2488">createRegionServerStatusStub</a>()</pre>
 <div class="block">Get the current master from ZooKeeper and open the RPC connection to it.
  To get a fresh connection, the current rssStub must be null.
  Method will block until a master is available. You can break from this
@@ -3553,7 +3553,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionServerStatusStub</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2504">createRegionServerStatusStub</a>(boolean&nbsp;refresh)</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2501">createRegionServerStatusStub</a>(boolean&nbsp;refresh)</pre>
 <div class="block">Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh
  connection, the current rssStub must be null. Method will block until a master is available.
  You can break from this block by requesting the server stop.</div>
@@ -3571,7 +3571,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>keepLooping</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2576">keepLooping</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2573">keepLooping</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if we should break loop because cluster is going down or
@@ -3585,7 +3585,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>reportForDuty</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2587">reportForDuty</a>()
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2584">reportForDuty</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>
@@ -3599,7 +3599,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastSequenceId</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2628">getLastSequenceId</a>(byte[]&nbsp;encodedRegionName)</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2625">getLastSequenceId</a>(byte[]&nbsp;encodedRegionName)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/LastSequenceId.html#getLastSequenceId-byte:A-">getLastSequenceId</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/LastSequenceId.html" title="interface in org.apache.hadoop.hbase.regionserver">LastSequenceId</a></code></dd>
@@ -3617,7 +3617,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>closeAllRegions</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2659">closeAllRegions</a>(boolean&nbsp;abort)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2656">closeAllRegions</a>(boolean&nbsp;abort)</pre>
 <div class="block">Closes all regions.  Called on our way out.
  Assumes that its not possible for new regions to be added to onlineRegions
  while this method runs.</div>
@@ -3629,7 +3629,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>closeMetaTableRegions</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2668">closeMetaTableRegions</a>(boolean&nbsp;abort)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2665">closeMetaTableRegions</a>(boolean&nbsp;abort)</pre>
 <div class="block">Close meta region if we carry it</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -3643,7 +3643,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>closeUserRegions</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2691">closeUserRegions</a>(boolean&nbsp;abort)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2688">closeUserRegions</a>(boolean&nbsp;abort)</pre>
 <div class="block">Schedule closes on all user regions.
  Should be safe calling multiple times because it wont' close regions
  that are already closed or that are closing.</div>
@@ -3659,7 +3659,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getInfoServer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2707">getInfoServer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2704">getInfoServer</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the info server</dd>
@@ -3672,7 +3672,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2715">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2712">isStopped</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#isStopped--">isStopped</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></dd>
@@ -3687,7 +3687,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopping</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2720">isStopping</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2717">isStopping</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Server.html#isStopping--">isStopping</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></code></dd>
@@ -3702,7 +3702,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <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/regionserver/HRegionServer.html#line.2729">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2726">getConfiguration</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getConfiguration--">Server</a></code></span></div>
 <div class="block">Gets the configuration object for this server.</div>
 <dl>
@@ -3719,7 +3719,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getWriteLock</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.WriteLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantReadWriteLock.WriteLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2734">getWriteLock</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.WriteLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantReadWriteLock.WriteLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2731">getWriteLock</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the write lock for the server</dd>
@@ -3732,7 +3732,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumberOfOnlineRegions</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2738">getNumberOfOnlineRegions</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2735">getNumberOfOnlineRegions</a>()</pre>
 </li>
 </ul>
 <a name="isOnlineRegionsEmpty--">
@@ -3741,7 +3741,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>isOnlineRegionsEmpty</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2742">isOnlineRegionsEmpty</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2739">isOnlineRegionsEmpty</a>()</pre>
 </li>
 </ul>
 <a name="getOnlineRegionsLocalContext--">
@@ -3750,7 +3750,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRegionsLocalContext</h4>
-<pre>public&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="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2751">getOnlineRegionsLocalContext</a>()</pre>
+<pre>public&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="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2748">getOnlineRegionsLocalContext</a>()</pre>
 <div class="block">For tests, web ui and metrics.
  This method will only work if HRegionServer is in the same JVM as client;
  HRegion cannot be serialized to cross an rpc.</div>
@@ -3762,7 +3762,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2757">addRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2754">addRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MutableOnlineRegions.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-">MutableOnlineRegions</a></code></span></div>
 <div class="block">Add to online regions.</div>
 <dl>
@@ -3777,7 +3777,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2762">addRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</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/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;sortedRegions,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2759">addRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</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/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;sortedRegions,
                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                        long&nbsp;size)</pre>
 </li>
@@ -3788,7 +3788,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getCopyOfOnlineRegionsSortedByOffHeapSize</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</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/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2773">getCopyOfOnlineRegionsSortedByOffHeapSize</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</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/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2770">getCopyOfOnlineRegionsSortedByOffHeapSize</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>A new Map of online regions sorted by region off-heap size with the first entry being
@@ -3802,7 +3802,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getCopyOfOnlineRegionsSortedByOnHeapSize</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</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/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2793">getCopyOfOnlineRegionsSortedByOnHeapSize</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</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/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2790">getCopyOfOnlineRegionsSortedByOnHeapSize</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>A new Map of online regions sorted by region heap size with the first entry being the
@@ -3816,7 +3816,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartcode</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2812">getStartcode</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2809">getStartcode</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>time stamp in millis of when this region server was started</dd>
@@ -3829,7 +3829,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushRequester</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequester</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2818">getFlushRequester</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequester</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2815">getFlushRequester</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getFlushRequester--">getFlushRequester</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -3844,7 +3844,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionRequestor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequester.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequester</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2823">getCompactionRequestor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequester.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequester</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2820">getCompactionRequestor</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getCompactionRequestor--">getCompactionRequestor</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -3860,7 +3860,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getMostLoadedRegions</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2833">getMostLoadedRegions</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2830">getMostLoadedRegions</a>()</pre>
 <div class="block">Get the top N most loaded regions this server is serving so we can tell the
  master which regions it can reallocate if we're overloaded. TODO: actually
  calculate which regions are most loaded. (Right now, we're just grabbing
@@ -3873,7 +3873,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getLeases</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.html" title="class in org.apache.hadoop.hbase.regionserver">Leases</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2849">getLeases</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.html" title="class in org.apache.hadoop.hbase.regionserver">Leases</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2846">getLeases</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getLeases--">getLeases</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -3888,7 +3888,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getRootDir</h4>
-<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2856">getRootDir</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2853">getRootDir</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return the rootDir.</dd>
@@ -3901,7 +3901,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileSystem</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2864">getFileSystem</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2861">getFileSystem</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getFileSystem--">getFileSystem</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></code></dd>
@@ -3916,7 +3916,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALRootDir</h4>
-<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2871">getWALRootDir</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2868">getWALRootDir</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return the walRootDir.</dd>
@@ -3929,7 +3929,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALFileSystem</h4>
-<pre>protected&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2878">getWALFileSystem</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2875">getWALFileSystem</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return the walFs.</dd>
@@ -3942,7 +3942,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <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/regionserver/HRegionServer.html#line.2883">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/regionserver/HRegionServer.html#line.2880">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><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></code></dd>
@@ -3955,7 +3955,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getThreadWakeFrequency</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2892">getThreadWakeFrequency</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2889">getThreadWakeFrequency</a>()</pre>
 <div class="block">Interval at which threads should run</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -3969,7 +3969,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getZooKeeper</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2897">getZooKeeper</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2894">getZooKeeper</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getZooKeeper--">Server</a></code></span></div>
 <div class="block">Gets the ZooKeeper instance for this server.</div>
 <dl>
@@ -3984,7 +3984,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoordinatedStateManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CoordinatedStateManager.html" title="interface in org.apache.hadoop.hbase">CoordinatedStateManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2902">getCoordinatedStateManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CoordinatedStateManager.html" title="interface in org.apache.hadoop.hbase">CoordinatedStateManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2899">getCoordinatedStateManager</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getCoordinatedStateManager--">Server</a></code></span></div>
 <div class="block">Get CoordinatedStateManager instance for this server.</div>
 <dl>
@@ -3999,7 +3999,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2907">getServerName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2904">getServerName</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getServerName--">getServerName</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></code></dd>
@@ -4014,7 +4014,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerCoprocessorHost</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2911">getRegionServerCoprocessorHost</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2908">getRegionServerCoprocessorHost</a>()</pre>
 </li>
 </ul>
 <a name="getRegionsInTransitionInRS--">
@@ -4023,7 +4023,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionsInTransitionInRS</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;byte[],<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>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2916">getRegionsInTransitionInRS</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;byte[],<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>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2913">getRegionsInTransitionInRS</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRegionsInTransitionInRS--">RegionServerServices</a></code></span></div>
 <div class="block">Get the regions that are currently being opened or closed in the RS</div>
 <dl>
@@ -4040,7 +4040,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getExecutorService</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2921">getExecutorService</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2918">getExecutorService</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getExecutorService--">getExecutorService</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -4055,7 +4055,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getChoreService</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2926">getChoreService</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2923">getChoreService</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getChoreService--">getChoreService</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></code></dd>
@@ -4070,7 +4070,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerRpcQuotaManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerRpcQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2931">getRegionServerRpcQuotaManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerRpcQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2928">getRegionServerRpcQuotaManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRegionServerRpcQuotaManager--">getRegionServerRpcQuotaManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -4085,7 +4085,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>createNewReplicationInstance</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2941">createNewReplicationInstance</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2938">createNewReplicationInstance</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                  <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;server,
                                                  org.apache.hadoop.fs.FileSystem&nbsp;walFs,
                                                  org.apache.hadoop.fs.Path&nbsp;walDir,
@@ -4105,7 +4105,7 @@ protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/j
 <ul class="blockList">
 <li class="blockList">
 <h4>newReplicationInstance</h4>
-<pre>private static&nbsp;&lt;T extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a>&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2970">newReplicationInstance<

<TRUNCATED>

[11/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html
index 54b1f96..ed95cbf 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.ServerEventsListenerThread.html
@@ -31,922 +31,906 @@
 <span class="sourceLineNo">023</span>import java.io.ByteArrayInputStream;<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.ArrayList;<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.Collections;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.HashSet;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.LinkedList;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.List;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.Map;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.NavigableSet;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Set;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.SortedSet;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.TreeSet;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.Cell;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.Coprocessor;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.HConstants;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.MetaTableAccessor.DefaultVisitorBase;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.ServerName;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.client.Get;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.client.Put;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.client.Result;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.Table;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.constraint.ConstraintException;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.master.ServerListener;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.net.Address;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.protobuf.ProtobufMagic;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.protobuf.generated.MultiRowMutationProtos;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupProtos;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.quotas.QuotaTableUtil;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.security.access.AccessControlLists;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.zookeeper.KeeperException;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.slf4j.Logger;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.slf4j.LoggerFactory;<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<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> * This is an implementation of {@link RSGroupInfoManager} which makes<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * use of an HBase table as the persistence store for the group information.<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * It also makes use of zookeeper to store group information needed<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * for bootstrapping during offline mode.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> *<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * &lt;h2&gt;Concurrency&lt;/h2&gt;<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * RSGroup state is kept locally in Maps. There is a rsgroup name to cached<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * RSGroupInfo Map at {@link #rsGroupMap} and a Map of tables to the name of the<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * rsgroup they belong too (in {@link #tableMap}). These Maps are persisted to the<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * hbase:rsgroup table (and cached in zk) on each modification.<a name="line.104"></a>
-<span class="sourceLineNo">105</span> *<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * &lt;p&gt;Mutations on state are synchronized but reads can continue without having<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * to wait on an instance monitor, mutations do wholesale replace of the Maps on<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * update -- Copy-On-Write; the local Maps of state are read-only, just-in-case<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * (see flushConfig).<a name="line.109"></a>
-<span class="sourceLineNo">110</span> *<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * &lt;p&gt;Reads must not block else there is a danger we'll deadlock.<a name="line.111"></a>
-<span class="sourceLineNo">112</span> *<a name="line.112"></a>
-<span class="sourceLineNo">113</span> * &lt;p&gt;Clients of this class, the {@link RSGroupAdminEndpoint} for example, want to query and<a name="line.113"></a>
-<span class="sourceLineNo">114</span> * then act on the results of the query modifying cache in zookeeper without another thread<a name="line.114"></a>
-<span class="sourceLineNo">115</span> * making intermediate modifications. These clients synchronize on the 'this' instance so<a name="line.115"></a>
-<span class="sourceLineNo">116</span> * no other has access concurrently. Reads must be able to continue concurrently.<a name="line.116"></a>
-<span class="sourceLineNo">117</span> */<a name="line.117"></a>
-<span class="sourceLineNo">118</span>@InterfaceAudience.Private<a name="line.118"></a>
-<span class="sourceLineNo">119</span>final class RSGroupInfoManagerImpl implements RSGroupInfoManager {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  private static final Logger LOG = LoggerFactory.getLogger(RSGroupInfoManagerImpl.class);<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  /** Table descriptor for &lt;code&gt;hbase:rsgroup&lt;/code&gt; catalog table */<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private final static HTableDescriptor RSGROUP_TABLE_DESC;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  static {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    RSGROUP_TABLE_DESC = new HTableDescriptor(RSGROUP_TABLE_NAME);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    RSGROUP_TABLE_DESC.addFamily(new HColumnDescriptor(META_FAMILY_BYTES));<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    RSGROUP_TABLE_DESC.setRegionSplitPolicyClassName(DisabledRegionSplitPolicy.class.getName());<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    try {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      RSGROUP_TABLE_DESC.addCoprocessor(<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        MultiRowMutationEndpoint.class.getName(),<a name="line.130"></a>
-<span class="sourceLineNo">131</span>          null, Coprocessor.PRIORITY_SYSTEM, null);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    } catch (IOException ex) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      throw new RuntimeException(ex);<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><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  // There two Maps are immutable and wholesale replaced on each modification<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  // so are safe to access concurrently. See class comment.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private volatile Map&lt;String, RSGroupInfo&gt; rsGroupMap = Collections.emptyMap();<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  private volatile Map&lt;TableName, String&gt; tableMap = Collections.emptyMap();<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private final MasterServices masterServices;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  private Table rsGroupTable;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final ClusterConnection conn;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final ZKWatcher watcher;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  private final RSGroupStartupWorker rsGroupStartupWorker = new RSGroupStartupWorker();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  // contains list of groups that were last flushed to persistent store<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private Set&lt;String&gt; prevRSGroups = new HashSet&lt;&gt;();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private final ServerEventsListenerThread serverEventsListenerThread =<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      new ServerEventsListenerThread();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private FailedOpenUpdaterThread failedOpenUpdaterThread;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  private RSGroupInfoManagerImpl(MasterServices masterServices) throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    this.masterServices = masterServices;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    this.watcher = masterServices.getZooKeeper();<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    this.conn = masterServices.getClusterConnection();<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>  private synchronized void init() throws IOException{<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    refresh();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    serverEventsListenerThread.start();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    masterServices.getServerManager().registerListener(serverEventsListenerThread);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    failedOpenUpdaterThread = new FailedOpenUpdaterThread(masterServices.getConfiguration());<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    failedOpenUpdaterThread.start();<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    masterServices.getServerManager().registerListener(failedOpenUpdaterThread);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  static RSGroupInfoManager getInstance(MasterServices master) throws IOException {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    RSGroupInfoManagerImpl instance = new RSGroupInfoManagerImpl(master);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    instance.init();<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    return instance;<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>  public void start(){<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    // create system table of rsgroup<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    rsGroupStartupWorker.start();<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 synchronized void addRSGroup(RSGroupInfo rsGroupInfo) throws IOException {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    checkGroupName(rsGroupInfo.getName());<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    if (rsGroupMap.get(rsGroupInfo.getName()) != null ||<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        rsGroupInfo.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      throw new DoNotRetryIOException("Group already exists: "+ rsGroupInfo.getName());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    Map&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    newGroupMap.put(rsGroupInfo.getName(), rsGroupInfo);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    flushConfig(newGroupMap);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>  private RSGroupInfo getRSGroupInfo(final String groupName) throws DoNotRetryIOException {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    RSGroupInfo rsGroupInfo = getRSGroup(groupName);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    if (rsGroupInfo == null) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      throw new DoNotRetryIOException("RSGroup " + groupName + " does not exist");<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    return rsGroupInfo;<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 synchronized Set&lt;Address&gt; moveServers(Set&lt;Address&gt; servers, String srcGroup,<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      String dstGroup) throws IOException {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    RSGroupInfo src = getRSGroupInfo(srcGroup);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    RSGroupInfo dst = getRSGroupInfo(dstGroup);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    // If destination is 'default' rsgroup, only add servers that are online. If not online, drop<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    // it. If not 'default' group, add server to 'dst' rsgroup EVEN IF IT IS NOT online (could be a<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    // rsgroup of dead servers that are to come back later).<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    Set&lt;Address&gt; onlineServers = dst.getName().equals(RSGroupInfo.DEFAULT_GROUP)?<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        Utility.getOnlineServers(this.masterServices): null;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    for (Address el: servers) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      src.removeServer(el);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (onlineServers != null) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        if (!onlineServers.contains(el)) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          if (LOG.isDebugEnabled()) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>            LOG.debug("Dropping " + el + " during move-to-default rsgroup because not online");<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          continue;<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>      dst.addServer(el);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    newGroupMap.put(src.getName(), src);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    newGroupMap.put(dst.getName(), dst);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    flushConfig(newGroupMap);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    return dst.getServers();<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 RSGroupInfo getRSGroupOfServer(Address serverHostPort) throws IOException {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    for (RSGroupInfo info: rsGroupMap.values()) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      if (info.containsServer(serverHostPort)) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        return info;<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>    return null;<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>  @Override<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  public RSGroupInfo getRSGroup(String groupName) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    return rsGroupMap.get(groupName);<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>  @Override<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  public String getRSGroupOfTable(TableName tableName) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    return tableMap.get(tableName);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>  @Override<a name="line.248"></a>
-<span class="sourceLineNo">249</span>  public synchronized void moveTables(Set&lt;TableName&gt; tableNames, String groupName)<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      throws IOException {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    if (groupName != null &amp;&amp; !rsGroupMap.containsKey(groupName)) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      throw new DoNotRetryIOException("Group "+groupName+" does not exist or is a special group");<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>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    for(TableName tableName: tableNames) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      if (tableMap.containsKey(tableName)) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        RSGroupInfo src = new RSGroupInfo(newGroupMap.get(tableMap.get(tableName)));<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        src.removeTable(tableName);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        newGroupMap.put(src.getName(), src);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      if(groupName != null) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        RSGroupInfo dst = new RSGroupInfo(newGroupMap.get(groupName));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        dst.addTable(tableName);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        newGroupMap.put(dst.getName(), dst);<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>    flushConfig(newGroupMap);<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>  @Override<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  public synchronized void removeRSGroup(String groupName) throws IOException {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (!rsGroupMap.containsKey(groupName) || groupName.equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      throw new DoNotRetryIOException("Group " + groupName + " does not exist or is a reserved "<a name="line.274"></a>
-<span class="sourceLineNo">275</span>          + "group");<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    newGroupMap.remove(groupName);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    flushConfig(newGroupMap);<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>  @Override<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public List&lt;RSGroupInfo&gt; listRSGroups() {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    return Lists.newLinkedList(rsGroupMap.values());<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 boolean isOnline() {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    return rsGroupStartupWorker.isOnline();<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 void moveServersAndTables(Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables,<a name="line.293"></a>
-<span class="sourceLineNo">294</span>                                   String srcGroup, String dstGroup) throws IOException {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    //get server's group<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    RSGroupInfo srcGroupInfo = getRSGroupInfo(srcGroup);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    RSGroupInfo dstGroupInfo = getRSGroupInfo(dstGroup);<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>    //move servers<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    for (Address el: servers) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      srcGroupInfo.removeServer(el);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      dstGroupInfo.addServer(el);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    //move tables<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    for(TableName tableName: tables) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      srcGroupInfo.removeTable(tableName);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      dstGroupInfo.addTable(tableName);<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>    //flush changed groupinfo<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    newGroupMap.put(srcGroupInfo.getName(), srcGroupInfo);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    newGroupMap.put(dstGroupInfo.getName(), dstGroupInfo);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    flushConfig(newGroupMap);<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 synchronized void removeServers(Set&lt;Address&gt; servers) throws IOException {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    Map&lt;String, RSGroupInfo&gt; rsGroupInfos = new HashMap&lt;String, RSGroupInfo&gt;();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    for (Address el: servers) {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      RSGroupInfo rsGroupInfo = getRSGroupOfServer(el);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      if (rsGroupInfo != null) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>        RSGroupInfo newRsGroupInfo = rsGroupInfos.get(rsGroupInfo.getName());<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        if (newRsGroupInfo == null) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>          rsGroupInfo.removeServer(el);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>          rsGroupInfos.put(rsGroupInfo.getName(), rsGroupInfo);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        } else {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>          newRsGroupInfo.removeServer(el);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>          rsGroupInfos.put(newRsGroupInfo.getName(), newRsGroupInfo);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        }<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      }else {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        LOG.warn("Server " + el + " does not belong to any rsgroup.");<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>    if (rsGroupInfos.size() &gt; 0) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      Map&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      newGroupMap.putAll(rsGroupInfos);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      flushConfig(newGroupMap);<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><a name="line.342"></a>
-<span class="sourceLineNo">343</span>  List&lt;RSGroupInfo&gt; retrieveGroupListFromGroupTable() throws IOException {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    List&lt;RSGroupInfo&gt; rsGroupInfoList = Lists.newArrayList();<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    for (Result result : rsGroupTable.getScanner(new Scan())) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      RSGroupProtos.RSGroupInfo proto = RSGroupProtos.RSGroupInfo.parseFrom(<a name="line.346"></a>
-<span class="sourceLineNo">347</span>              result.getValue(META_FAMILY_BYTES, META_QUALIFIER_BYTES));<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      rsGroupInfoList.add(RSGroupProtobufUtil.toGroupInfo(proto));<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    return rsGroupInfoList;<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>  List&lt;RSGroupInfo&gt; retrieveGroupListFromZookeeper() throws IOException {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    List&lt;RSGroupInfo&gt; RSGroupInfoList = Lists.newArrayList();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    //Overwrite any info stored by table, this takes precedence<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    try {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      if(ZKUtil.checkExists(watcher, groupBasePath) != -1) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        List&lt;String&gt; children = ZKUtil.listChildrenAndWatchForNewChildren(watcher, groupBasePath);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (children == null) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          return RSGroupInfoList;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        for(String znode: children) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          byte[] data = ZKUtil.getData(watcher, ZNodePaths.joinZNode(groupBasePath, znode));<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          if(data.length &gt; 0) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>            ProtobufUtil.expectPBMagicPrefix(data);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            ByteArrayInputStream bis = new ByteArrayInputStream(<a name="line.367"></a>
-<span class="sourceLineNo">368</span>                data, ProtobufUtil.lengthOfPBMagic(), data.length);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>            RSGroupInfoList.add(RSGroupProtobufUtil.toGroupInfo(<a name="line.369"></a>
-<span class="sourceLineNo">370</span>                RSGroupProtos.RSGroupInfo.parseFrom(bis)));<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        }<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        LOG.debug("Read ZK GroupInfo count:" + RSGroupInfoList.size());<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      }<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    } catch (KeeperException|DeserializationException|InterruptedException e) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      throw new IOException("Failed to read rsGroupZNode",e);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    return RSGroupInfoList;<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>  @Override<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  public void refresh() throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    refresh(false);<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>   * Read rsgroup info from the source of truth, the hbase:rsgroup table.<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * Update zk cache. Called on startup of the manager.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   */<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  private synchronized void refresh(boolean forceOnline) throws IOException {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    List&lt;RSGroupInfo&gt; groupList = new LinkedList&lt;&gt;();<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>    // Overwrite anything read from zk, group table is source of truth<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    // if online read from GROUP table<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    if (forceOnline || isOnline()) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      LOG.debug("Refreshing in Online mode.");<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      if (rsGroupTable == null) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        rsGroupTable = conn.getTable(RSGROUP_TABLE_NAME);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      groupList.addAll(retrieveGroupListFromGroupTable());<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      LOG.debug("Refreshing in Offline mode.");<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      groupList.addAll(retrieveGroupListFromZookeeper());<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>    // refresh default group, prune<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    NavigableSet&lt;TableName&gt; orphanTables = new TreeSet&lt;&gt;();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    for(String entry: masterServices.getTableDescriptors().getAll().keySet()) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      orphanTables.add(TableName.valueOf(entry));<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>
-<span class="sourceLineNo">412</span>    List&lt;TableName&gt; specialTables =<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        new ArrayList&lt;TableName&gt;(Arrays.asList(AccessControlLists.ACL_TABLE_NAME,<a name="line.413"></a>
-<span class="sourceLineNo">414</span>          TableName.META_TABLE_NAME, TableName.NAMESPACE_TABLE_NAME, RSGROUP_TABLE_NAME));<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    // if quota is enabled, add corresponding system table to special tables list<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    if (QuotaUtil.isQuotaEnabled(conn.getConfiguration())) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      specialTables.add(QuotaTableUtil.QUOTA_TABLE_NAME);<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>    for (TableName table : specialTables) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      orphanTables.add(table);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    for (RSGroupInfo group: groupList) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      if(!group.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        orphanTables.removeAll(group.getTables());<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><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // This is added to the last of the list so it overwrites the 'default' rsgroup loaded<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    // from region group table or zk<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    groupList.add(new RSGroupInfo(RSGroupInfo.DEFAULT_GROUP, getDefaultServers(),<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        orphanTables));<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // populate the data<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    HashMap&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    HashMap&lt;TableName, String&gt; newTableMap = Maps.newHashMap();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    for (RSGroupInfo group : groupList) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      newGroupMap.put(group.getName(), group);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      for(TableName table: group.getTables()) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        newTableMap.put(table, group.getName());<a name="line.440"></a>
+<span class="sourceLineNo">026</span>import java.util.Collections;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.HashMap;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.HashSet;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.LinkedList;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.List;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.Map;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.NavigableSet;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.Set;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.SortedSet;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.TreeSet;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.Cell;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.Coprocessor;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HConstants;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.MetaTableAccessor.DefaultVisitorBase;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ServerName;<a name="line.48"></a>
+<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.client.ClusterConnection;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.Get;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.client.Put;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.client.Result;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.Table;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.constraint.ConstraintException;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.master.ServerListener;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.net.Address;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.protobuf.ProtobufMagic;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.protobuf.generated.MultiRowMutationProtos;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupProtos;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.zookeeper.KeeperException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.slf4j.Logger;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.slf4j.LoggerFactory;<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>/**<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * This is an implementation of {@link RSGroupInfoManager} which makes<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * use of an HBase table as the persistence store for the group information.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * It also makes use of zookeeper to store group information needed<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * for bootstrapping during offline mode.<a name="line.94"></a>
+<span class="sourceLineNo">095</span> *<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * &lt;h2&gt;Concurrency&lt;/h2&gt;<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * RSGroup state is kept locally in Maps. There is a rsgroup name to cached<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * RSGroupInfo Map at {@link #rsGroupMap} and a Map of tables to the name of the<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * rsgroup they belong too (in {@link #tableMap}). These Maps are persisted to the<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * hbase:rsgroup table (and cached in zk) on each modification.<a name="line.100"></a>
+<span class="sourceLineNo">101</span> *<a name="line.101"></a>
+<span class="sourceLineNo">102</span> * &lt;p&gt;Mutations on state are synchronized but reads can continue without having<a name="line.102"></a>
+<span class="sourceLineNo">103</span> * to wait on an instance monitor, mutations do wholesale replace of the Maps on<a name="line.103"></a>
+<span class="sourceLineNo">104</span> * update -- Copy-On-Write; the local Maps of state are read-only, just-in-case<a name="line.104"></a>
+<span class="sourceLineNo">105</span> * (see flushConfig).<a name="line.105"></a>
+<span class="sourceLineNo">106</span> *<a name="line.106"></a>
+<span class="sourceLineNo">107</span> * &lt;p&gt;Reads must not block else there is a danger we'll deadlock.<a name="line.107"></a>
+<span class="sourceLineNo">108</span> *<a name="line.108"></a>
+<span class="sourceLineNo">109</span> * &lt;p&gt;Clients of this class, the {@link RSGroupAdminEndpoint} for example, want to query and<a name="line.109"></a>
+<span class="sourceLineNo">110</span> * then act on the results of the query modifying cache in zookeeper without another thread<a name="line.110"></a>
+<span class="sourceLineNo">111</span> * making intermediate modifications. These clients synchronize on the 'this' instance so<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * no other has access concurrently. Reads must be able to continue concurrently.<a name="line.112"></a>
+<span class="sourceLineNo">113</span> */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>@InterfaceAudience.Private<a name="line.114"></a>
+<span class="sourceLineNo">115</span>final class RSGroupInfoManagerImpl implements RSGroupInfoManager {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private static final Logger LOG = LoggerFactory.getLogger(RSGroupInfoManagerImpl.class);<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  /** Table descriptor for &lt;code&gt;hbase:rsgroup&lt;/code&gt; catalog table */<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  private final static HTableDescriptor RSGROUP_TABLE_DESC;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  static {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    RSGROUP_TABLE_DESC = new HTableDescriptor(RSGROUP_TABLE_NAME);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    RSGROUP_TABLE_DESC.addFamily(new HColumnDescriptor(META_FAMILY_BYTES));<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    RSGROUP_TABLE_DESC.setRegionSplitPolicyClassName(DisabledRegionSplitPolicy.class.getName());<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    try {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      RSGROUP_TABLE_DESC.addCoprocessor(<a name="line.125"></a>
+<span class="sourceLineNo">126</span>        MultiRowMutationEndpoint.class.getName(),<a name="line.126"></a>
+<span class="sourceLineNo">127</span>          null, Coprocessor.PRIORITY_SYSTEM, null);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    } catch (IOException ex) {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      throw new RuntimeException(ex);<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>  // There two Maps are immutable and wholesale replaced on each modification<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  // so are safe to access concurrently. See class comment.<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private volatile Map&lt;String, RSGroupInfo&gt; rsGroupMap = Collections.emptyMap();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  private volatile Map&lt;TableName, String&gt; tableMap = Collections.emptyMap();<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  private final MasterServices masterServices;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  private Table rsGroupTable;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private final ClusterConnection conn;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  private final ZKWatcher watcher;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  private final RSGroupStartupWorker rsGroupStartupWorker = new RSGroupStartupWorker();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  // contains list of groups that were last flushed to persistent store<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  private Set&lt;String&gt; prevRSGroups = new HashSet&lt;&gt;();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private final ServerEventsListenerThread serverEventsListenerThread =<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      new ServerEventsListenerThread();<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  private FailedOpenUpdaterThread failedOpenUpdaterThread;<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private RSGroupInfoManagerImpl(MasterServices masterServices) throws IOException {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    this.masterServices = masterServices;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    this.watcher = masterServices.getZooKeeper();<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    this.conn = masterServices.getClusterConnection();<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>  private synchronized void init() throws IOException{<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    refresh();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    serverEventsListenerThread.start();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    masterServices.getServerManager().registerListener(serverEventsListenerThread);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    failedOpenUpdaterThread = new FailedOpenUpdaterThread(masterServices.getConfiguration());<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    failedOpenUpdaterThread.start();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    masterServices.getServerManager().registerListener(failedOpenUpdaterThread);<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>  static RSGroupInfoManager getInstance(MasterServices master) throws IOException {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    RSGroupInfoManagerImpl instance = new RSGroupInfoManagerImpl(master);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    instance.init();<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    return instance;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  public void start(){<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // create system table of rsgroup<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    rsGroupStartupWorker.start();<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 synchronized void addRSGroup(RSGroupInfo rsGroupInfo) throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    checkGroupName(rsGroupInfo.getName());<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    if (rsGroupMap.get(rsGroupInfo.getName()) != null ||<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        rsGroupInfo.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      throw new DoNotRetryIOException("Group already exists: "+ rsGroupInfo.getName());<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    Map&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    newGroupMap.put(rsGroupInfo.getName(), rsGroupInfo);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    flushConfig(newGroupMap);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private RSGroupInfo getRSGroupInfo(final String groupName) throws DoNotRetryIOException {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    RSGroupInfo rsGroupInfo = getRSGroup(groupName);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    if (rsGroupInfo == null) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      throw new DoNotRetryIOException("RSGroup " + groupName + " does not exist");<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    return rsGroupInfo;<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>  @Override<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  public synchronized Set&lt;Address&gt; moveServers(Set&lt;Address&gt; servers, String srcGroup,<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      String dstGroup) throws IOException {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    RSGroupInfo src = getRSGroupInfo(srcGroup);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    RSGroupInfo dst = getRSGroupInfo(dstGroup);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    // If destination is 'default' rsgroup, only add servers that are online. If not online, drop<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // it. If not 'default' group, add server to 'dst' rsgroup EVEN IF IT IS NOT online (could be a<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // rsgroup of dead servers that are to come back later).<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    Set&lt;Address&gt; onlineServers = dst.getName().equals(RSGroupInfo.DEFAULT_GROUP)?<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        Utility.getOnlineServers(this.masterServices): null;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    for (Address el: servers) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      src.removeServer(el);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      if (onlineServers != null) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        if (!onlineServers.contains(el)) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>          if (LOG.isDebugEnabled()) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>            LOG.debug("Dropping " + el + " during move-to-default rsgroup because not online");<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          }<a name="line.211"></a>
+<span class="sourceLineNo">212</span>          continue;<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>      dst.addServer(el);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    newGroupMap.put(src.getName(), src);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    newGroupMap.put(dst.getName(), dst);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    flushConfig(newGroupMap);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    return dst.getServers();<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 RSGroupInfo getRSGroupOfServer(Address serverHostPort) throws IOException {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    for (RSGroupInfo info: rsGroupMap.values()) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      if (info.containsServer(serverHostPort)) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        return info;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      }<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    return null;<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>  public RSGroupInfo getRSGroup(String groupName) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return rsGroupMap.get(groupName);<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>  @Override<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  public String getRSGroupOfTable(TableName tableName) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    return tableMap.get(tableName);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>  @Override<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  public synchronized void moveTables(Set&lt;TableName&gt; tableNames, String groupName)<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      throws IOException {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    if (groupName != null &amp;&amp; !rsGroupMap.containsKey(groupName)) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      throw new DoNotRetryIOException("Group "+groupName+" does not exist");<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>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    for(TableName tableName: tableNames) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      if (tableMap.containsKey(tableName)) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        RSGroupInfo src = new RSGroupInfo(newGroupMap.get(tableMap.get(tableName)));<a name="line.254"></a>
+<span class="sourceLineNo">255</span>        src.removeTable(tableName);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        newGroupMap.put(src.getName(), src);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      if(groupName != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        RSGroupInfo dst = new RSGroupInfo(newGroupMap.get(groupName));<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        dst.addTable(tableName);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        newGroupMap.put(dst.getName(), dst);<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>    flushConfig(newGroupMap);<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>  @Override<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  public synchronized void removeRSGroup(String groupName) throws IOException {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    if (!rsGroupMap.containsKey(groupName) || groupName.equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      throw new DoNotRetryIOException("Group " + groupName + " does not exist or is a reserved "<a name="line.270"></a>
+<span class="sourceLineNo">271</span>          + "group");<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    newGroupMap.remove(groupName);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    flushConfig(newGroupMap);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>  @Override<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  public List&lt;RSGroupInfo&gt; listRSGroups() {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    return Lists.newLinkedList(rsGroupMap.values());<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>  @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  public boolean isOnline() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    return rsGroupStartupWorker.isOnline();<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
+<span class="sourceLineNo">287</span><a name="line.287"></a>
+<span class="sourceLineNo">288</span>  @Override<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  public void moveServersAndTables(Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables,<a name="line.289"></a>
+<span class="sourceLineNo">290</span>                                   String srcGroup, String dstGroup) throws IOException {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    //get server's group<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    RSGroupInfo srcGroupInfo = getRSGroupInfo(srcGroup);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    RSGroupInfo dstGroupInfo = getRSGroupInfo(dstGroup);<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>    //move servers<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    for (Address el: servers) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      srcGroupInfo.removeServer(el);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      dstGroupInfo.addServer(el);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    //move tables<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    for(TableName tableName: tables) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      srcGroupInfo.removeTable(tableName);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      dstGroupInfo.addTable(tableName);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>    //flush changed groupinfo<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    Map&lt;String,RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    newGroupMap.put(srcGroupInfo.getName(), srcGroupInfo);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    newGroupMap.put(dstGroupInfo.getName(), dstGroupInfo);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    flushConfig(newGroupMap);<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 synchronized void removeServers(Set&lt;Address&gt; servers) throws IOException {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    Map&lt;String, RSGroupInfo&gt; rsGroupInfos = new HashMap&lt;String, RSGroupInfo&gt;();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    for (Address el: servers) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      RSGroupInfo rsGroupInfo = getRSGroupOfServer(el);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      if (rsGroupInfo != null) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        RSGroupInfo newRsGroupInfo = rsGroupInfos.get(rsGroupInfo.getName());<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        if (newRsGroupInfo == null) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          rsGroupInfo.removeServer(el);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          rsGroupInfos.put(rsGroupInfo.getName(), rsGroupInfo);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        } else {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          newRsGroupInfo.removeServer(el);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>          rsGroupInfos.put(newRsGroupInfo.getName(), newRsGroupInfo);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      }else {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        LOG.warn("Server " + el + " does not belong to any rsgroup.");<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    if (rsGroupInfos.size() &gt; 0) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      Map&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap(rsGroupMap);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      newGroupMap.putAll(rsGroupInfos);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      flushConfig(newGroupMap);<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><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  List&lt;RSGroupInfo&gt; retrieveGroupListFromGroupTable() throws IOException {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    List&lt;RSGroupInfo&gt; rsGroupInfoList = Lists.newArrayList();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    for (Result result : rsGroupTable.getScanner(new Scan())) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      RSGroupProtos.RSGroupInfo proto = RSGroupProtos.RSGroupInfo.parseFrom(<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              result.getValue(META_FAMILY_BYTES, META_QUALIFIER_BYTES));<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      rsGroupInfoList.add(RSGroupProtobufUtil.toGroupInfo(proto));<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    return rsGroupInfoList;<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>  List&lt;RSGroupInfo&gt; retrieveGroupListFromZookeeper() throws IOException {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    String groupBasePath = ZNodePaths.joinZNode(watcher.znodePaths.baseZNode, rsGroupZNode);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    List&lt;RSGroupInfo&gt; RSGroupInfoList = Lists.newArrayList();<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    //Overwrite any info stored by table, this takes precedence<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    try {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      if(ZKUtil.checkExists(watcher, groupBasePath) != -1) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        List&lt;String&gt; children = ZKUtil.listChildrenAndWatchForNewChildren(watcher, groupBasePath);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        if (children == null) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>          return RSGroupInfoList;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        for(String znode: children) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          byte[] data = ZKUtil.getData(watcher, ZNodePaths.joinZNode(groupBasePath, znode));<a name="line.360"></a>
+<span class="sourceLineNo">361</span>          if(data.length &gt; 0) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>            ProtobufUtil.expectPBMagicPrefix(data);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>            ByteArrayInputStream bis = new ByteArrayInputStream(<a name="line.363"></a>
+<span class="sourceLineNo">364</span>                data, ProtobufUtil.lengthOfPBMagic(), data.length);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>            RSGroupInfoList.add(RSGroupProtobufUtil.toGroupInfo(<a name="line.365"></a>
+<span class="sourceLineNo">366</span>                RSGroupProtos.RSGroupInfo.parseFrom(bis)));<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>        LOG.debug("Read ZK GroupInfo count:" + RSGroupInfoList.size());<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    } catch (KeeperException|DeserializationException|InterruptedException e) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      throw new IOException("Failed to read rsGroupZNode",e);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    return RSGroupInfoList;<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 void refresh() throws IOException {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    refresh(false);<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>   * Read rsgroup info from the source of truth, the hbase:rsgroup table.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * Update zk cache. Called on startup of the manager.<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   */<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  private synchronized void refresh(boolean forceOnline) throws IOException {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    List&lt;RSGroupInfo&gt; groupList = new LinkedList&lt;&gt;();<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span>    // Overwrite anything read from zk, group table is source of truth<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    // if online read from GROUP table<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    if (forceOnline || isOnline()) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      LOG.debug("Refreshing in Online mode.");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      if (rsGroupTable == null) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        rsGroupTable = conn.getTable(RSGROUP_TABLE_NAME);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      groupList.addAll(retrieveGroupListFromGroupTable());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    } else {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      LOG.debug("Refreshing in Offline mode.");<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      groupList.addAll(retrieveGroupListFromZookeeper());<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>    // refresh default group, prune<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    NavigableSet&lt;TableName&gt; orphanTables = new TreeSet&lt;&gt;();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    for(String entry: masterServices.getTableDescriptors().getAll().keySet()) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      orphanTables.add(TableName.valueOf(entry));<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    for (RSGroupInfo group: groupList) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      if(!group.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        orphanTables.removeAll(group.getTables());<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>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span>    // This is added to the last of the list so it overwrites the 'default' rsgroup loaded<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    // from region group table or zk<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    groupList.add(new RSGroupInfo(RSGroupInfo.DEFAULT_GROUP, getDefaultServers(),<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        orphanTables));<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>    // populate the data<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    HashMap&lt;String, RSGroupInfo&gt; newGroupMap = Maps.newHashMap();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    HashMap&lt;TableName, String&gt; newTableMap = Maps.newHashMap();<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    for (RSGroupInfo group : groupList) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      newGroupMap.put(group.getName(), group);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      for(TableName table: group.getTables()) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        newTableMap.put(table, group.getName());<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    resetRSGroupAndTableMaps(newGroupMap, newTableMap);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    updateCacheOfRSGroups(rsGroupMap.keySet());<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>  private synchronized Map&lt;TableName,String&gt; flushConfigTable(Map&lt;String,RSGroupInfo&gt; groupMap)<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Map&lt;TableName,String&gt; newTableMap = Maps.newHashMap();<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    List&lt;Mutation&gt; mutations = Lists.newArrayList();<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // populate deletes<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    for(String groupName : prevRSGroups) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      if(!groupMap.containsKey(groupName)) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        Delete d = new Delete(Bytes.toBytes(groupName));<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        mutations.add(d);<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>    resetRSGroupAndTableMaps(newGroupMap, newTableMap);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    updateCacheOfRSGroups(rsGroupMap.keySet());<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>  private synchronized Map&lt;TableName,String&gt; flushConfigTable(Map&lt;String,RSGroupInfo&gt; groupMap)<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      throws IOException {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    Map&lt;TableName,String&gt; newTableMap = Maps.newHashMap();<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    List&lt;Mutation&gt; mutations = Lists.newArrayList();<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span>    // populate deletes<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    for(String groupName : prevRSGroups) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      if(!groupMap.containsKey(groupName)) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        Delete d = new Delete(Bytes.toBytes(groupName));<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        mutations.add(d);<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>    // populate puts<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    for(RSGroupInfo RSGroupInfo : groupMap.values()) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      RSGroupProtos.RSGroupInfo proto = RSGroupProtobufUtil.toProtoGroupInfo(RSGroupInfo);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      Put p = new Put(Bytes.toBytes(RSGroupInfo.getName()));<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      p.addColumn(META_FAMILY_BYTES, META_QUALIFIER_BYTES, proto.toByteArray());<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      mutations.add(p);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      for(TableName entry: RSGroupInfo.getTables()) {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        newTableMap.put(entry, RSGroupInfo.getName());<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      }<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>    if(mutations.size() &gt; 0) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      multiMutate(mutations);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    return newTableMap;<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>  private synchronized void flushConfig()<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    flushConfig(this.rsGroupMap);<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>  private sync

<TRUNCATED>

[21/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html
index 7290d52..f71c930 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html
@@ -128,244 +128,245 @@
 <span class="sourceLineNo">120</span>   */<a name="line.120"></a>
 <span class="sourceLineNo">121</span>  @Override<a name="line.121"></a>
 <span class="sourceLineNo">122</span>  public Cell forceCopyOfBigCellInto(Cell cell) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    int size = KeyValueUtil.length(cell) + ChunkCreator.SIZEOF_CHUNK_HEADER;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    Preconditions.checkArgument(size &gt;= 0, "negative size");<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    if (size &lt;= dataChunkSize) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // Using copyCellInto for cells which are bigger than the original maxAlloc<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      Cell newCell = copyCellInto(cell, dataChunkSize);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      return newCell;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    } else {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      Chunk c = getNewExternalChunk(size);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      int allocOffset = c.alloc(size);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return copyToChunkCell(cell, c.getData(), allocOffset, size);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    }<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>  private Cell copyCellInto(Cell cell, int maxAlloc) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    int size = KeyValueUtil.length(cell);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    Preconditions.checkArgument(size &gt;= 0, "negative size");<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    // Callers should satisfy large allocations directly from JVM since they<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    // don't cause fragmentation as badly.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    if (size &gt; maxAlloc) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return null;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    Chunk c = null;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    int allocOffset = 0;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    while (true) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      // Try to get the chunk<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      c = getOrMakeChunk();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      // we may get null because the some other thread succeeded in getting the lock<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      // and so the current thread has to try again to make its chunk or grab the chunk<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      // that the other thread created<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      // Try to allocate from this chunk<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      if (c != null) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        allocOffset = c.alloc(size);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        if (allocOffset != -1) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>          // We succeeded - this is the common case - small alloc<a name="line.156"></a>
-<span class="sourceLineNo">157</span>          // from a big buffer<a name="line.157"></a>
-<span class="sourceLineNo">158</span>          break;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        }<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        // not enough space!<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        // try to retire this chunk<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        tryRetireChunk(c);<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>    return copyToChunkCell(cell, c.getData(), allocOffset, size);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  }<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>   * Clone the passed cell by copying its data into the passed buf and create a cell with a chunkid<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * out of it<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  private Cell copyToChunkCell(Cell cell, ByteBuffer buf, int offset, int len) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    int tagsLen = cell.getTagsLength();<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    if (cell instanceof ExtendedCell) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      ((ExtendedCell) cell).write(buf, offset);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    } else {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      // Normally all Cell impls within Server will be of type ExtendedCell. Just considering the<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      // other case also. The data fragments within Cell is copied into buf as in KeyValue<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      // serialization format only.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      KeyValueUtil.appendTo(cell, buf, offset, true);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    // TODO : write the seqid here. For writing seqId we should create a new cell type so<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    // that seqId is not used as the state<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    if (tagsLen == 0) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      // When tagsLen is 0, make a NoTagsByteBufferKeyValue version. This is an optimized class<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      // which directly return tagsLen as 0. So we avoid parsing many length components in<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      // reading the tagLength stored in the backing buffer. The Memstore addition of every Cell<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      // call getTagsLength().<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return new NoTagByteBufferChunkKeyValue(buf, offset, len, cell.getSequenceId());<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    } else {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      return new ByteBufferChunkKeyValue(buf, offset, len, cell.getSequenceId());<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>  /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * Close this instance since it won't be used any more, try to put the chunks<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   * back to pool<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 void close() {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    this.closed = true;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    // We could put back the chunks to pool for reusing only when there is no<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    // opening scanner which will read their data<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    int count  = openScannerCount.get();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if(count == 0) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      recycleChunks();<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><a name="line.209"></a>
-<span class="sourceLineNo">210</span>  /**<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * Called when opening a scanner on the data of this MemStoreLAB<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 void incScannerCount() {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    this.openScannerCount.incrementAndGet();<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>  /**<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * Called when closing a scanner on the data of this MemStoreLAB<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 void decScannerCount() {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    int count = this.openScannerCount.decrementAndGet();<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    if (this.closed &amp;&amp; count == 0) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      recycleChunks();<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><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  private void recycleChunks() {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    if (reclaimed.compareAndSet(false, true)) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      chunkCreator.putbackChunks(chunks);<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><a name="line.234"></a>
-<span class="sourceLineNo">235</span>  /**<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   * Try to retire the current chunk if it is still<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * &lt;code&gt;c&lt;/code&gt;. Postcondition is that curChunk.get()<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * != c<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * @param c the chunk to retire<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   * @return true if we won the race to retire the chunk<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  private void tryRetireChunk(Chunk c) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    currChunk.compareAndSet(c, null);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    // If the CAS succeeds, that means that we won the race<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    // to retire the chunk. We could use this opportunity to<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    // update metrics on external fragmentation.<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    //<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    // If the CAS fails, that means that someone else already<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    // retired the chunk for us.<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>  /**<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   * Get the current chunk, or, if there is no current chunk,<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   * allocate a new one from the JVM.<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  private Chunk getOrMakeChunk() {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    // Try to get the chunk<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    Chunk c;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    c = currChunk.get();<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (c != null) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return c;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    // No current chunk, so we want to allocate one. We race<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    // against other allocators to CAS in an uninitialized chunk<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    // (which is cheap to allocate)<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    if (lock.tryLock()) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      try {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        // once again check inside the lock<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        c = currChunk.get();<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        if (c != null) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>          return c;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        c = this.chunkCreator.getChunk(idxType);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        if (c != null) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>          // set the curChunk. No need of CAS as only one thread will be here<a name="line.275"></a>
-<span class="sourceLineNo">276</span>          currChunk.set(c);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          chunks.add(c.getId());<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          return c;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        }<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      } finally {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        lock.unlock();<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    return null;<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>  /* Returning a new pool chunk, without replacing current chunk,<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  ** meaning MSLABImpl does not make the returned chunk as CurChunk.<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  ** The space on this chunk will be allocated externally.<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  ** The interface is only for external callers.<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 Chunk getNewExternalChunk(ChunkCreator.ChunkType chunkType) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    switch (chunkType) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      case INDEX_CHUNK:<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      case DATA_CHUNK:<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        Chunk c = this.chunkCreator.getChunk(chunkType);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        chunks.add(c.getId());<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        return c;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      case JUMBO_CHUNK: // a jumbo chunk doesn't have a fixed size<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      default:<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        return null;<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><a name="line.305"></a>
-<span class="sourceLineNo">306</span>  /* Returning a new chunk, without replacing current chunk,<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  ** meaning MSLABImpl does not make the returned chunk as CurChunk.<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  ** The space on this chunk will be allocated externally.<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  ** The interface is only for external callers.<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  ** Chunks from pools are not allocated from here, since they have fixed sizes<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 Chunk getNewExternalChunk(int size) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    int allocSize = size + ChunkCreator.getInstance().SIZEOF_CHUNK_HEADER;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    if (allocSize &lt;= ChunkCreator.getInstance().getChunkSize()) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      return getNewExternalChunk(ChunkCreator.ChunkType.DATA_CHUNK);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    } else {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      Chunk c = this.chunkCreator.getJumboChunk(size);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      chunks.add(c.getId());<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      return c;<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>  @Override<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public boolean isOnHeap() {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    return !isOffHeap();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  }<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>  @Override<a name="line.329"></a>
-<span class="sourceLineNo">330</span>  public boolean isOffHeap() {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    return this.chunkCreator.isOffheap();<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>  @VisibleForTesting<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  Chunk getCurrentChunk() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    return currChunk.get();<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>  @VisibleForTesting<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  BlockingQueue&lt;Chunk&gt; getPooledChunks() {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    BlockingQueue&lt;Chunk&gt; pooledChunks = new LinkedBlockingQueue&lt;&gt;();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    for (Integer id : this.chunks) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      Chunk chunk = chunkCreator.getChunk(id);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      if (chunk != null &amp;&amp; chunk.isFromPool()) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        pooledChunks.add(chunk);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    return pooledChunks;<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>  @VisibleForTesting Integer getNumOfChunksReturnedToPool() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    int i = 0;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    for (Integer id : this.chunks) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (chunkCreator.isChunkInPool(id)) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        i++;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    return i;<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">123</span>    int size = cell instanceof ExtendedCell? ((ExtendedCell)cell).getSerializedSize():<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        KeyValueUtil.length(cell);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    size += ChunkCreator.SIZEOF_CHUNK_HEADER;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    Preconditions.checkArgument(size &gt;= 0, "negative size");<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    if (size &lt;= dataChunkSize) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      // Using copyCellInto for cells which are bigger than the original maxAlloc<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      return copyCellInto(cell, dataChunkSize);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    } else {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      Chunk c = getNewExternalChunk(size);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      int allocOffset = c.alloc(size);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      return copyToChunkCell(cell, c.getData(), allocOffset, 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><a name="line.136"></a>
+<span class="sourceLineNo">137</span>  private Cell copyCellInto(Cell cell, int maxAlloc) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    int size = cell instanceof ExtendedCell? ((ExtendedCell)cell).getSerializedSize():<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        KeyValueUtil.length(cell);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    Preconditions.checkArgument(size &gt;= 0, "negative size");<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    // Callers should satisfy large allocations directly from JVM since they<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    // don't cause fragmentation as badly.<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    if (size &gt; maxAlloc) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      return null;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    Chunk c = null;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    int allocOffset = 0;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    while (true) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      // Try to get the chunk<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      c = getOrMakeChunk();<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      // we may get null because the some other thread succeeded in getting the lock<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      // and so the current thread has to try again to make its chunk or grab the chunk<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      // that the other thread created<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      // Try to allocate from this chunk<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      if (c != null) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        allocOffset = c.alloc(size);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        if (allocOffset != -1) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>          // We succeeded - this is the common case - small alloc<a name="line.158"></a>
+<span class="sourceLineNo">159</span>          // from a big buffer<a name="line.159"></a>
+<span class="sourceLineNo">160</span>          break;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        }<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        // not enough space!<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        // try to retire this chunk<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        tryRetireChunk(c);<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>    return copyToChunkCell(cell, c.getData(), allocOffset, size);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<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>   * Clone the passed cell by copying its data into the passed buf and create a cell with a chunkid<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * out of it<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  private static Cell copyToChunkCell(Cell cell, ByteBuffer buf, int offset, int len) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    int tagsLen = cell.getTagsLength();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    if (cell instanceof ExtendedCell) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      ((ExtendedCell) cell).write(buf, offset);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    } else {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      // Normally all Cell impls within Server will be of type ExtendedCell. Just considering the<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      // other case also. The data fragments within Cell is copied into buf as in KeyValue<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      // serialization format only.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      KeyValueUtil.appendTo(cell, buf, offset, true);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    // TODO : write the seqid here. For writing seqId we should create a new cell type so<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    // that seqId is not used as the state<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    if (tagsLen == 0) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      // When tagsLen is 0, make a NoTagsByteBufferKeyValue version. This is an optimized class<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      // which directly return tagsLen as 0. So we avoid parsing many length components in<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      // reading the tagLength stored in the backing buffer. The Memstore addition of every Cell<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      // call getTagsLength().<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      return new NoTagByteBufferChunkKeyValue(buf, offset, len, cell.getSequenceId());<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    } else {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      return new ByteBufferChunkKeyValue(buf, offset, len, cell.getSequenceId());<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><a name="line.196"></a>
+<span class="sourceLineNo">197</span>  /**<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * Close this instance since it won't be used any more, try to put the chunks<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * back to pool<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 void close() {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.closed = true;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    // We could put back the chunks to pool for reusing only when there is no<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    // opening scanner which will read their data<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    int count  = openScannerCount.get();<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if(count == 0) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      recycleChunks();<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>  /**<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * Called when opening a scanner on the data of this MemStoreLAB<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 void incScannerCount() {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    this.openScannerCount.incrementAndGet();<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>   * Called when closing a scanner on the data of this MemStoreLAB<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 void decScannerCount() {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    int count = this.openScannerCount.decrementAndGet();<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    if (this.closed &amp;&amp; count == 0) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      recycleChunks();<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  private void recycleChunks() {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    if (reclaimed.compareAndSet(false, true)) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      chunkCreator.putbackChunks(chunks);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    }<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  }<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>  /**<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * Try to retire the current chunk if it is still<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * &lt;code&gt;c&lt;/code&gt;. Postcondition is that curChunk.get()<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * != c<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   * @param c the chunk to retire<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * @return true if we won the race to retire the chunk<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  private void tryRetireChunk(Chunk c) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    currChunk.compareAndSet(c, null);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    // If the CAS succeeds, that means that we won the race<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    // to retire the chunk. We could use this opportunity to<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    // update metrics on external fragmentation.<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    //<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    // If the CAS fails, that means that someone else already<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    // retired the chunk for us.<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>   * Get the current chunk, or, if there is no current chunk,<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * allocate a new one from the JVM.<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  private Chunk getOrMakeChunk() {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    // Try to get the chunk<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    Chunk c = currChunk.get();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    if (c != null) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      return c;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    // No current chunk, so we want to allocate one. We race<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    // against other allocators to CAS in an uninitialized chunk<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    // (which is cheap to allocate)<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    if (lock.tryLock()) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      try {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        // once again check inside the lock<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        c = currChunk.get();<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        if (c != null) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          return c;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        c = this.chunkCreator.getChunk(idxType);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        if (c != null) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          // set the curChunk. No need of CAS as only one thread will be here<a name="line.276"></a>
+<span class="sourceLineNo">277</span>          currChunk.set(c);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          chunks.add(c.getId());<a name="line.278"></a>
+<span class="sourceLineNo">279</span>          return c;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      } finally {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>        lock.unlock();<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>    return null;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
+<span class="sourceLineNo">287</span><a name="line.287"></a>
+<span class="sourceLineNo">288</span>  /* Returning a new pool chunk, without replacing current chunk,<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  ** meaning MSLABImpl does not make the returned chunk as CurChunk.<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  ** The space on this chunk will be allocated externally.<a name="line.290"></a>
+<span class="sourceLineNo">291</span>  ** The interface is only for external callers.<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  */<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  @Override<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public Chunk getNewExternalChunk(ChunkCreator.ChunkType chunkType) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    switch (chunkType) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      case INDEX_CHUNK:<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      case DATA_CHUNK:<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        Chunk c = this.chunkCreator.getChunk(chunkType);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        chunks.add(c.getId());<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        return c;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      case JUMBO_CHUNK: // a jumbo chunk doesn't have a fixed size<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      default:<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        return null;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>  /* Returning a new chunk, without replacing current chunk,<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  ** meaning MSLABImpl does not make the returned chunk as CurChunk.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  ** The space on this chunk will be allocated externally.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  ** The interface is only for external callers.<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  ** Chunks from pools are not allocated from here, since they have fixed sizes<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 Chunk getNewExternalChunk(int size) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    int allocSize = size + ChunkCreator.getInstance().SIZEOF_CHUNK_HEADER;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    if (allocSize &lt;= ChunkCreator.getInstance().getChunkSize()) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      return getNewExternalChunk(ChunkCreator.ChunkType.DATA_CHUNK);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    } else {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      Chunk c = this.chunkCreator.getJumboChunk(size);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      chunks.add(c.getId());<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      return c;<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>  @Override<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  public boolean isOnHeap() {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    return !isOffHeap();<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>  @Override<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  public boolean isOffHeap() {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    return this.chunkCreator.isOffheap();<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>  @VisibleForTesting<a name="line.335"></a>
+<span class="sourceLineNo">336</span>  Chunk getCurrentChunk() {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    return currChunk.get();<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>  @VisibleForTesting<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  BlockingQueue&lt;Chunk&gt; getPooledChunks() {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    BlockingQueue&lt;Chunk&gt; pooledChunks = new LinkedBlockingQueue&lt;&gt;();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    for (Integer id : this.chunks) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      Chunk chunk = chunkCreator.getChunk(id);<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      if (chunk != null &amp;&amp; chunk.isFromPool()) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        pooledChunks.add(chunk);<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>    return pooledChunks;<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>  @VisibleForTesting Integer getNumOfChunksReturnedToPool() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    int i = 0;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    for (Integer id : this.chunks) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      if (chunkCreator.isChunkInPool(id)) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        i++;<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>    return i;<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
index a588fcf..098dc5e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
@@ -51,197 +51,208 @@
 <span class="sourceLineNo">043</span> * target cluster is an HBase cluster.<a name="line.43"></a>
 <span class="sourceLineNo">044</span> */<a name="line.44"></a>
 <span class="sourceLineNo">045</span>@InterfaceAudience.Private<a name="line.45"></a>
-<span class="sourceLineNo">046</span>@edu.umd.cs.findbugs.annotations.SuppressWarnings(value="MT_CORRECTNESS",<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  justification="Thinks zkw needs to be synchronized access but should be fine as is.")<a name="line.47"></a>
-<span class="sourceLineNo">048</span>public abstract class HBaseReplicationEndpoint extends BaseReplicationEndpoint<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  implements Abortable {<a name="line.49"></a>
+<span class="sourceLineNo">046</span>public abstract class HBaseReplicationEndpoint extends BaseReplicationEndpoint<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  implements Abortable {<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(HBaseReplicationEndpoint.class);<a name="line.49"></a>
 <span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>  private static final Logger LOG = LoggerFactory.getLogger(HBaseReplicationEndpoint.class);<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private ZKWatcher zkw = null; // FindBugs: MT_CORRECTNESS<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private List&lt;ServerName&gt; regionServers = new ArrayList&lt;&gt;(0);<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private long lastRegionServerUpdate;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  protected void disconnect() {<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    if (zkw != null) {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>      zkw.close();<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    }<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  }<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>   * A private method used to re-establish a zookeeper session with a peer cluster.<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   * @param ke<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   */<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  protected void reconnect(KeeperException ke) {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    if (ke instanceof ConnectionLossException || ke instanceof SessionExpiredException<a name="line.69"></a>
-<span class="sourceLineNo">070</span>        || ke instanceof AuthFailedException) {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      String clusterKey = ctx.getPeerConfig().getClusterKey();<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      LOG.warn("Lost the ZooKeeper connection for peer " + clusterKey, ke);<a name="line.72"></a>
-<span class="sourceLineNo">073</span>      try {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>        reloadZkWatcher();<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      } catch (IOException io) {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>        LOG.warn("Creation of ZookeeperWatcher failed for peer " + clusterKey, io);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      }<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  @Override<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public void start() {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    startAsync();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>  @Override<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  public void stop() {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    stopAsync();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  @Override<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  protected void doStart() {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    try {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      reloadZkWatcher();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      notifyStarted();<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    } catch (IOException e) {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      notifyFailed(e);<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><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  @Override<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  protected void doStop() {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    disconnect();<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    notifyStopped();<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  }<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  @Override<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  // Synchronize peer cluster connection attempts to avoid races and rate<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  // limit connections when multiple replication sources try to connect to<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  // the peer cluster. If the peer cluster is down we can get out of control<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  // over time.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  public synchronized UUID getPeerUUID() {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    UUID peerUUID = null;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    try {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      peerUUID = ZKClusterId.getUUIDForCluster(zkw);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    } catch (KeeperException ke) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      reconnect(ke);<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    }<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    return peerUUID;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  /**<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * Get the ZK connection to this peer<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * @return zk connection<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  protected ZKWatcher getZkw() {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    return zkw;<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>  /**<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   * Closes the current ZKW (if not null) and creates a new one<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   * @throws IOException If anything goes wrong connecting<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   */<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  void reloadZkWatcher() throws IOException {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    if (zkw != null) zkw.close();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    zkw = new ZKWatcher(ctx.getConfiguration(),<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        "connection to cluster: " + ctx.getPeerId(), this);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    getZkw().registerListener(new PeerRegionServerListener(this));<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 void abort(String why, Throwable e) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    LOG.error("The HBaseReplicationEndpoint corresponding to peer " + ctx.getPeerId()<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        + " was aborted for the following reason(s):" + why, e);<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 boolean isAborted() {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    // Currently this is never "Aborted", we just log when the abort method is called.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    return false;<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>  /**<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * Get the list of all the region servers from the specified peer<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   * @param zkw zk connection to use<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * @return list of region server addresses or an empty list if the slave is unavailable<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  protected static List&lt;ServerName&gt; fetchSlavesAddresses(ZKWatcher zkw)<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      throws KeeperException {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    List&lt;String&gt; children = ZKUtil.listChildrenAndWatchForNewChildren(zkw, zkw.znodePaths.rsZNode);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    if (children == null) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      return Collections.emptyList();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    List&lt;ServerName&gt; addresses = new ArrayList&lt;&gt;(children.size());<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    for (String child : children) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      addresses.add(ServerName.parseServerName(child));<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    return addresses;<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>  /**<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * Get a list of all the addresses of all the region servers<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * for this peer cluster<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @return list of addresses<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  // Synchronize peer cluster connection attempts to avoid races and rate<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  // limit connections when multiple replication sources try to connect to<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  // the peer cluster. If the peer cluster is down we can get out of control<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  // over time.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public synchronized List&lt;ServerName&gt; getRegionServers() {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    try {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      setRegionServers(fetchSlavesAddresses(this.getZkw()));<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    } catch (KeeperException ke) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      if (LOG.isDebugEnabled()) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        LOG.debug("Fetch slaves addresses failed", ke);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      reconnect(ke);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    return regionServers;<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>  /**<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   * Set the list of region servers for that peer<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   * @param regionServers list of addresses for the region servers<a name="line.194"></a>
-<span class="sourceLineNo">195</span>   */<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  public synchronized void setRegionServers(List&lt;ServerName&gt; regionServers) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    this.regionServers = regionServers;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    lastRegionServerUpdate = System.currentTimeMillis();<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>  /**<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * Get the timestamp at which the last change occurred to the list of region servers to replicate<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * to.<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * @return The System.currentTimeMillis at the last time the list of peer region servers changed.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   */<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  public long getLastRegionServerUpdate() {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    return lastRegionServerUpdate;<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>  /**<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * Tracks changes to the list of region servers in a peer's cluster.<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  public static class PeerRegionServerListener extends ZKListener {<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>    private final HBaseReplicationEndpoint replicationEndpoint;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    private final String regionServerListNode;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    public PeerRegionServerListener(HBaseReplicationEndpoint replicationPeer) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      super(replicationPeer.getZkw());<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      this.replicationEndpoint = replicationPeer;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      this.regionServerListNode = replicationEndpoint.getZkw().znodePaths.rsZNode;<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 synchronized void nodeChildrenChanged(String path) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      if (path.equals(regionServerListNode)) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        try {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          LOG.info("Detected change to peer region servers, fetching updated list");<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          replicationEndpoint.setRegionServers(fetchSlavesAddresses(replicationEndpoint.getZkw()));<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        } catch (KeeperException e) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          LOG.error("Error reading slave addresses", e);<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>    }<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">051</span>  private Object zkwLock = new Object();<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private ZKWatcher zkw = null;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private List&lt;ServerName&gt; regionServers = new ArrayList&lt;&gt;(0);<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private long lastRegionServerUpdate;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  protected void disconnect() {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    synchronized (zkwLock) {<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      if (zkw != null) {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>        zkw.close();<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      }<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    }<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>  /**<a name="line.65"></a>
+<span class="sourceLineNo">066</span>   * A private method used to re-establish a zookeeper session with a peer cluster.<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   * @param ke<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  protected void reconnect(KeeperException ke) {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    if (ke instanceof ConnectionLossException || ke instanceof SessionExpiredException<a name="line.70"></a>
+<span class="sourceLineNo">071</span>        || ke instanceof AuthFailedException) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      String clusterKey = ctx.getPeerConfig().getClusterKey();<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      LOG.warn("Lost the ZooKeeper connection for peer " + clusterKey, ke);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      try {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>        reloadZkWatcher();<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      } catch (IOException io) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>        LOG.warn("Creation of ZookeeperWatcher failed for peer " + clusterKey, io);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      }<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    }<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 void start() {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    startAsync();<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 void stop() {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    stopAsync();<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>  protected void doStart() {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    try {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      reloadZkWatcher();<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      notifyStarted();<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    } catch (IOException e) {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      notifyFailed(e);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    }<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>  @Override<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected void doStop() {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    disconnect();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    notifyStopped();<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>  @Override<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  // Synchronize peer cluster connection attempts to avoid races and rate<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  // limit connections when multiple replication sources try to connect to<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  // the peer cluster. If the peer cluster is down we can get out of control<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  // over time.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  public synchronized UUID getPeerUUID() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    UUID peerUUID = null;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    try {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      synchronized (zkwLock) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        peerUUID = ZKClusterId.getUUIDForCluster(zkw);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      }<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    } catch (KeeperException ke) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      reconnect(ke);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    }<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    return peerUUID;<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>  /**<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * Get the ZK connection to this peer<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * @return zk connection<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   */<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  protected ZKWatcher getZkw() {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    synchronized (zkwLock) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      return zkw;<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><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  /**<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   * Closes the current ZKW (if not null) and creates a new one<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   * @throws IOException If anything goes wrong connecting<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  void reloadZkWatcher() throws IOException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    synchronized (zkwLock) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      if (zkw != null) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        zkw.close();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      zkw = new ZKWatcher(ctx.getConfiguration(),<a name="line.144"></a>
+<span class="sourceLineNo">145</span>        "connection to cluster: " + ctx.getPeerId(), this);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      zkw.registerListener(new PeerRegionServerListener(this));<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  @Override<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void abort(String why, Throwable e) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    LOG.error("The HBaseReplicationEndpoint corresponding to peer " + ctx.getPeerId()<a name="line.152"></a>
+<span class="sourceLineNo">153</span>        + " was aborted for the following reason(s):" + why, e);<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 boolean isAborted() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    // Currently this is never "Aborted", we just log when the abort method is called.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    return false;<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>  /**<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * Get the list of all the region servers from the specified peer<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * @param zkw zk connection to use<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @return list of region server addresses or an empty list if the slave is unavailable<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  protected static List&lt;ServerName&gt; fetchSlavesAddresses(ZKWatcher zkw)<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      throws KeeperException {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    List&lt;String&gt; children = ZKUtil.listChildrenAndWatchForNewChildren(zkw, zkw.znodePaths.rsZNode);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    if (children == null) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      return Collections.emptyList();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    List&lt;ServerName&gt; addresses = new ArrayList&lt;&gt;(children.size());<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    for (String child : children) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      addresses.add(ServerName.parseServerName(child));<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    }<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    return addresses;<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>  /**<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * Get a list of all the addresses of all the region servers<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * for this peer cluster<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @return list of addresses<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public List&lt;ServerName&gt; getRegionServers() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    try {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      // Synchronize peer cluster connection attempts to avoid races and rate<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      // limit connections when multiple replication sources try to connect to<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      // the peer cluster. If the peer cluster is down we can get out of control<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      // over time.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      synchronized (zkwLock) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        setRegionServers(fetchSlavesAddresses(zkw));<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    } catch (KeeperException ke) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      if (LOG.isDebugEnabled()) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        LOG.debug("Fetch slaves addresses failed", ke);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      }<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      reconnect(ke);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    return regionServers;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  }<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>   * Set the list of region servers for that peer<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   * @param regionServers list of addresses for the region servers<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   */<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  public synchronized void setRegionServers(List&lt;ServerName&gt; regionServers) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    this.regionServers = regionServers;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    lastRegionServerUpdate = System.currentTimeMillis();<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>  /**<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * Get the timestamp at which the last change occurred to the list of region servers to replicate<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * to.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * @return The System.currentTimeMillis at the last time the list of peer region servers changed.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   */<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  public long getLastRegionServerUpdate() {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    return lastRegionServerUpdate;<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>  /**<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * Tracks changes to the list of region servers in a peer's cluster.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   */<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  public static class PeerRegionServerListener extends ZKListener {<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>    private final HBaseReplicationEndpoint replicationEndpoint;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    private final String regionServerListNode;<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>    public PeerRegionServerListener(HBaseReplicationEndpoint replicationPeer) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      super(replicationPeer.getZkw());<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      this.replicationEndpoint = replicationPeer;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      this.regionServerListNode = replicationEndpoint.getZkw().znodePaths.rsZNode;<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 synchronized void nodeChildrenChanged(String path) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      if (path.equals(regionServerListNode)) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        try {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          LOG.info("Detected change to peer region servers, fetching updated list");<a name="line.239"></a>
+<span class="sourceLineNo">240</span>          replicationEndpoint.setRegionServers(fetchSlavesAddresses(replicationEndpoint.getZkw()));<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        } catch (KeeperException e) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          LOG.error("Error reading slave addresses", e);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        }<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      }<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    }<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>
 
 
 


[42/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/class-use/BBKVComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/BBKVComparator.html b/devapidocs/org/apache/hadoop/hbase/class-use/BBKVComparator.html
new file mode 100644
index 0000000..daee413
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/BBKVComparator.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.BBKVComparator (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.BBKVComparator (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<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/BBKVComparator.html" title="class in org.apache.hadoop.hbase">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>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/class-use/BBKVComparator.html" target="_top">Frames</a></li>
+<li><a href="BBKVComparator.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>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.BBKVComparator" class="title">Uses of Class<br>org.apache.hadoop.hbase.BBKVComparator</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.BBKVComparator</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<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/BBKVComparator.html" title="class in org.apache.hadoop.hbase">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>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/class-use/BBKVComparator.html" target="_top">Frames</a></li>
+<li><a href="BBKVComparator.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>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/class-use/ByteBufferKeyValue.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/ByteBufferKeyValue.html b/devapidocs/org/apache/hadoop/hbase/class-use/ByteBufferKeyValue.html
index 211b4dd..0d6ccc4 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/ByteBufferKeyValue.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/ByteBufferKeyValue.html
@@ -122,11 +122,9 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>private static int</code></td>
-<td class="colLast"><span class="typeNameLabel">CellComparatorImpl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compareByteBufferKeyValue-org.apache.hadoop.hbase.ByteBufferKeyValue-org.apache.hadoop.hbase.ByteBufferKeyValue-">compareByteBufferKeyValue</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferKeyValue</a>&nbsp;left,
-                         <a href="../../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferKeyValue</a>&nbsp;right)</code>
-<div class="block">Specialized comparator for the ByteBufferKeyValue type exclusivesly.</div>
-</td>
+<td class="colFirst"><code>(package private) static int</code></td>
+<td class="colLast"><span class="typeNameLabel">BBKVComparator.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/BBKVComparator.html#compare-org.apache.hadoop.hbase.ByteBufferKeyValue-org.apache.hadoop.hbase.ByteBufferKeyValue-">compare</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferKeyValue</a>&nbsp;left,
+       <a href="../../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">ByteBufferKeyValue</a>&nbsp;right)</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html b/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
index 4a6ec6b..0f40fe4 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
@@ -818,9 +818,7 @@ service.</div>
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><span class="typeNameLabel">CellComparatorImpl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compare-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-boolean-">compare</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;a,
        <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;b,
-       boolean&nbsp;ignoreSequenceid)</code>
-<div class="block">Compare cells.</div>
-</td>
+       boolean&nbsp;ignoreSequenceid)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>int</code></td>
@@ -1071,7 +1069,7 @@ service.</div>
            <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) int</code></td>
+<td class="colFirst"><code>(package private) static int</code></td>
 <td class="colLast"><span class="typeNameLabel">CellComparatorImpl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/CellComparatorImpl.html#compareRows-org.apache.hadoop.hbase.Cell-int-org.apache.hadoop.hbase.Cell-int-">compareRows</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
            int&nbsp;leftRowLength,
            <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right,
@@ -5342,7 +5340,7 @@ service.</div>
 <td class="colLast"><span class="typeNameLabel">CellChunkImmutableSegment.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellChunkImmutableSegment.html#copyCellIntoMSLAB-org.apache.hadoop.hbase.Cell-">copyCellIntoMSLAB</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MemStoreLABImpl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#copyToChunkCell-org.apache.hadoop.hbase.Cell-java.nio.ByteBuffer-int-int-">copyToChunkCell</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
                int&nbsp;offset,
@@ -6206,7 +6204,7 @@ service.</div>
 <td class="colLast"><span class="typeNameLabel">CellChunkImmutableSegment.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellChunkImmutableSegment.html#copyCellIntoMSLAB-org.apache.hadoop.hbase.Cell-">copyCellIntoMSLAB</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MemStoreLABImpl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.html#copyToChunkCell-org.apache.hadoop.hbase.Cell-java.nio.ByteBuffer-int-int-">copyToChunkCell</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf,
                int&nbsp;offset,
@@ -7271,7 +7269,7 @@ service.</div>
     <a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
+<td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><span class="typeNameLabel">HRegion.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#updateCellTimestamps-java.lang.Iterable-byte:A-">updateCellTimestamps</a></span>(<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="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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;&nbsp;cellItr,
                     byte[]&nbsp;now)</code>
 <div class="block">Replace any cell timestamps set to <a href="../../../../../org/apache/hadoop/hbase/HConstants.html#LATEST_TIMESTAMP"><code>HConstants.LATEST_TIMESTAMP</code></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/client/Mutation.CellWrapper.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/Mutation.CellWrapper.html b/devapidocs/org/apache/hadoop/hbase/client/Mutation.CellWrapper.html
index 5cac61b..b07a55c 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/Mutation.CellWrapper.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/Mutation.CellWrapper.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Enclosing class:</dt>
@@ -359,7 +359,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html" ti
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index 4e18ae6..ecfb870 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -550,24 +550,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/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/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</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/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</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/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/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</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/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/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/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/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/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.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/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/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/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/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.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/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/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/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/favored/StartcodeAgnosticServerName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/favored/StartcodeAgnosticServerName.html b/devapidocs/org/apache/hadoop/hbase/favored/StartcodeAgnosticServerName.html
index bb6d169..869ec2f 100644
--- a/devapidocs/org/apache/hadoop/hbase/favored/StartcodeAgnosticServerName.html
+++ b/devapidocs/org/apache/hadoop/hbase/favored/StartcodeAgnosticServerName.html
@@ -205,7 +205,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/ServerName.html#equals-java.lang.Object-">equals</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getAddress--">getAddress</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getHostAndPort--">getHostAndPort</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getHostname--">getHostname</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getPort--">getPort</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getServerName--">getServerName</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getServerName-java.lang.String-long-">getServerName</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getServerNameLessStartCode-java.lang.String-">getServerNameLessStartCode</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getServerStartcodeFromServerName-java.lang.String-">getServerStartcodeFromServerNa
 me</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getStartcode--">getStartcode</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getVersionedBytes--">getVersionedBytes</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#isFullServerName-java.lang.String-">isFullServerName</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#isSameAddress-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.ServerName-">isSameAddress</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#parseHostname-java.lang.String-">parseHostname</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#parsePort-java.lang.String-">parsePort</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#parseServerName-java.lang.String-">parseServerName</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#parseStartcode-java.lang.String-">parseStartcode</a>, <a href="../../../../../org/ap
 ache/hadoop/hbase/ServerName.html#parseVersionedServerName-byte:A-">parseVersionedServerName</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#toShortString--">toShortString</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#toString--">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#valueOf-java.lang.String-">valueOf</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#valueOf-java.lang.String-int-long-">valueOf</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/ServerName.html#equals-java.lang.Object-">equals</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getAddress--">getAddress</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getHostAndPort--">getHostAndPort</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getHostname--">getHostname</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getHostnameLowerCase--">getHostnameLowerCase</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getPort--">getPort</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getServerName--">getServerName</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getServerName-java.lang.String-long-">getServerName</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getServerNameLessStartCode-java.lang.String-">getServerNameLessStartCode</a>, <a href="../../../../../org/apac
 he/hadoop/hbase/ServerName.html#getServerStartcodeFromServerName-java.lang.String-">getServerStartcodeFromServerName</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getStartcode--">getStartcode</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#getVersionedBytes--">getVersionedBytes</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#isFullServerName-java.lang.String-">isFullServerName</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#isSameAddress-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.ServerName-">isSameAddress</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#parseHostname-java.lang.String-">parseHostname</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#parsePort-java.lang.String-">parsePort</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#parseServerName-java.lang.String-">parseServerName</a>, <a href="../../../../../org/apache
 /hadoop/hbase/ServerName.html#parseStartcode-java.lang.String-">parseStartcode</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#parseVersionedServerName-byte:A-">parseVersionedServerName</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#toShortString--">toShortString</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#toString--">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#valueOf-java.lang.String-">valueOf</a>, <a href="../../../../../org/apache/hadoop/hbase/ServerName.html#valueOf-java.lang.String-int-long-">valueOf</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/filter/KeyOnlyFilter.KeyOnlyByteBufferExtendedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/KeyOnlyFilter.KeyOnlyByteBufferExtendedCell.html b/devapidocs/org/apache/hadoop/hbase/filter/KeyOnlyFilter.KeyOnlyByteBufferExtendedCell.html
index e8ac165..b91abdd 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/KeyOnlyFilter.KeyOnlyByteBufferExtendedCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/KeyOnlyFilter.KeyOnlyByteBufferExtendedCell.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Enclosing class:</dt>
@@ -396,7 +396,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ByteBufferExtendedCell.h
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#deepClone--">deepClone</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize-boolean-">getSerializedSize</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.nio.ByteBuffer-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/ExtendedCell.html#write-java.io.OutputStream-boolean-">write</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 6dea30d..a1d02f9 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -184,13 +184,13 @@
 <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/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/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/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/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/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/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/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</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/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/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedExtendedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedExtendedCell.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedExtendedCell.html
index 9eca039..fdf3f3b 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedExtendedCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OffheapDecodedExtendedCell.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Enclosing class:</dt>
@@ -469,7 +469,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/ByteBufferExtendedCel
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html b/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html
index eb3dd60..30aa5b2 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.OnheapDecodedCell.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html?is-external=true" title="class or interface in java.lang">Cloneable</a>, <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>, <a href="../../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, <a href="../../../../../../org/apache/hadoop/hbase/RawCell.html" title="interface in org.apache.hadoop.hbase">RawCell</a></dd>
 </dl>
 <dl>
 <dt>Enclosing class:</dt>
@@ -433,7 +433,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/ExtendedCell.html"
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../../org/apache/hadoop/hbase/ExtendedCell.html" title="interface in org.apache.hadoop.hbase">ExtendedCell</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getChunkId--">getChunkId</a>, <a href="../../../../../../org/apache/hadoop/hbase/ExtendedCell.html#getSerializedSize--">getSerializedSize</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.RawCell">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
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 8fb27c3..ccf4c6d 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -273,11 +273,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.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</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.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/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</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>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index 1f90dde..6a2998c 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -350,8 +350,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.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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index 76f6d8f..deb19ba 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -294,9 +294,9 @@
 <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/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>
 <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/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/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index 7666acb..7dadf3f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -346,10 +346,10 @@
 <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/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/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/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/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.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/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
index 3e1ea7f..9eb46aa 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
@@ -125,8 +125,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/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/org/apache/hadoop/hbase/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-frame.html b/devapidocs/org/apache/hadoop/hbase/package-frame.html
index bd5cb4a..f253dc8 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-frame.html
@@ -48,6 +48,7 @@
 <li><a href="AsyncMetaTableAccessor.MetaTableScanResultConsumer.html" title="class in org.apache.hadoop.hbase" target="classFrame">AsyncMetaTableAccessor.MetaTableScanResultConsumer</a></li>
 <li><a href="AuthUtil.html" title="class in org.apache.hadoop.hbase" target="classFrame">AuthUtil</a></li>
 <li><a href="BaseConfigurable.html" title="class in org.apache.hadoop.hbase" target="classFrame">BaseConfigurable</a></li>
+<li><a href="BBKVComparator.html" title="class in org.apache.hadoop.hbase" target="classFrame">BBKVComparator</a></li>
 <li><a href="ByteBufferExtendedCell.html" title="class in org.apache.hadoop.hbase" target="classFrame">ByteBufferExtendedCell</a></li>
 <li><a href="ByteBufferKeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase" target="classFrame">ByteBufferKeyOnlyKeyValue</a></li>
 <li><a href="ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase" target="classFrame">ByteBufferKeyValue</a></li>


[20/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
index a588fcf..098dc5e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
@@ -51,197 +51,208 @@
 <span class="sourceLineNo">043</span> * target cluster is an HBase cluster.<a name="line.43"></a>
 <span class="sourceLineNo">044</span> */<a name="line.44"></a>
 <span class="sourceLineNo">045</span>@InterfaceAudience.Private<a name="line.45"></a>
-<span class="sourceLineNo">046</span>@edu.umd.cs.findbugs.annotations.SuppressWarnings(value="MT_CORRECTNESS",<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  justification="Thinks zkw needs to be synchronized access but should be fine as is.")<a name="line.47"></a>
-<span class="sourceLineNo">048</span>public abstract class HBaseReplicationEndpoint extends BaseReplicationEndpoint<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  implements Abortable {<a name="line.49"></a>
+<span class="sourceLineNo">046</span>public abstract class HBaseReplicationEndpoint extends BaseReplicationEndpoint<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  implements Abortable {<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(HBaseReplicationEndpoint.class);<a name="line.49"></a>
 <span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>  private static final Logger LOG = LoggerFactory.getLogger(HBaseReplicationEndpoint.class);<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private ZKWatcher zkw = null; // FindBugs: MT_CORRECTNESS<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private List&lt;ServerName&gt; regionServers = new ArrayList&lt;&gt;(0);<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private long lastRegionServerUpdate;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  protected void disconnect() {<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    if (zkw != null) {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>      zkw.close();<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    }<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  }<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>   * A private method used to re-establish a zookeeper session with a peer cluster.<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   * @param ke<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   */<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  protected void reconnect(KeeperException ke) {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    if (ke instanceof ConnectionLossException || ke instanceof SessionExpiredException<a name="line.69"></a>
-<span class="sourceLineNo">070</span>        || ke instanceof AuthFailedException) {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      String clusterKey = ctx.getPeerConfig().getClusterKey();<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      LOG.warn("Lost the ZooKeeper connection for peer " + clusterKey, ke);<a name="line.72"></a>
-<span class="sourceLineNo">073</span>      try {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>        reloadZkWatcher();<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      } catch (IOException io) {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>        LOG.warn("Creation of ZookeeperWatcher failed for peer " + clusterKey, io);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      }<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  @Override<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public void start() {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    startAsync();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>  @Override<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  public void stop() {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    stopAsync();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  @Override<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  protected void doStart() {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    try {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      reloadZkWatcher();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      notifyStarted();<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    } catch (IOException e) {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      notifyFailed(e);<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><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  @Override<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  protected void doStop() {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    disconnect();<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    notifyStopped();<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  }<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  @Override<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  // Synchronize peer cluster connection attempts to avoid races and rate<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  // limit connections when multiple replication sources try to connect to<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  // the peer cluster. If the peer cluster is down we can get out of control<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  // over time.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  public synchronized UUID getPeerUUID() {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    UUID peerUUID = null;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    try {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      peerUUID = ZKClusterId.getUUIDForCluster(zkw);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    } catch (KeeperException ke) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      reconnect(ke);<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    }<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    return peerUUID;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  /**<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * Get the ZK connection to this peer<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * @return zk connection<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  protected ZKWatcher getZkw() {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    return zkw;<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>  /**<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   * Closes the current ZKW (if not null) and creates a new one<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   * @throws IOException If anything goes wrong connecting<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   */<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  void reloadZkWatcher() throws IOException {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    if (zkw != null) zkw.close();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    zkw = new ZKWatcher(ctx.getConfiguration(),<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        "connection to cluster: " + ctx.getPeerId(), this);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    getZkw().registerListener(new PeerRegionServerListener(this));<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 void abort(String why, Throwable e) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    LOG.error("The HBaseReplicationEndpoint corresponding to peer " + ctx.getPeerId()<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        + " was aborted for the following reason(s):" + why, e);<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 boolean isAborted() {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    // Currently this is never "Aborted", we just log when the abort method is called.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    return false;<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>  /**<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * Get the list of all the region servers from the specified peer<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   * @param zkw zk connection to use<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * @return list of region server addresses or an empty list if the slave is unavailable<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  protected static List&lt;ServerName&gt; fetchSlavesAddresses(ZKWatcher zkw)<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      throws KeeperException {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    List&lt;String&gt; children = ZKUtil.listChildrenAndWatchForNewChildren(zkw, zkw.znodePaths.rsZNode);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    if (children == null) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      return Collections.emptyList();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    List&lt;ServerName&gt; addresses = new ArrayList&lt;&gt;(children.size());<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    for (String child : children) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      addresses.add(ServerName.parseServerName(child));<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    return addresses;<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>  /**<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * Get a list of all the addresses of all the region servers<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * for this peer cluster<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @return list of addresses<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  // Synchronize peer cluster connection attempts to avoid races and rate<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  // limit connections when multiple replication sources try to connect to<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  // the peer cluster. If the peer cluster is down we can get out of control<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  // over time.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public synchronized List&lt;ServerName&gt; getRegionServers() {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    try {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      setRegionServers(fetchSlavesAddresses(this.getZkw()));<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    } catch (KeeperException ke) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      if (LOG.isDebugEnabled()) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        LOG.debug("Fetch slaves addresses failed", ke);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      reconnect(ke);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    return regionServers;<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>  /**<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   * Set the list of region servers for that peer<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   * @param regionServers list of addresses for the region servers<a name="line.194"></a>
-<span class="sourceLineNo">195</span>   */<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  public synchronized void setRegionServers(List&lt;ServerName&gt; regionServers) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    this.regionServers = regionServers;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    lastRegionServerUpdate = System.currentTimeMillis();<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>  /**<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * Get the timestamp at which the last change occurred to the list of region servers to replicate<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * to.<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * @return The System.currentTimeMillis at the last time the list of peer region servers changed.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   */<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  public long getLastRegionServerUpdate() {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    return lastRegionServerUpdate;<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>  /**<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * Tracks changes to the list of region servers in a peer's cluster.<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  public static class PeerRegionServerListener extends ZKListener {<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>    private final HBaseReplicationEndpoint replicationEndpoint;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    private final String regionServerListNode;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    public PeerRegionServerListener(HBaseReplicationEndpoint replicationPeer) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      super(replicationPeer.getZkw());<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      this.replicationEndpoint = replicationPeer;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      this.regionServerListNode = replicationEndpoint.getZkw().znodePaths.rsZNode;<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 synchronized void nodeChildrenChanged(String path) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      if (path.equals(regionServerListNode)) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        try {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          LOG.info("Detected change to peer region servers, fetching updated list");<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          replicationEndpoint.setRegionServers(fetchSlavesAddresses(replicationEndpoint.getZkw()));<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        } catch (KeeperException e) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          LOG.error("Error reading slave addresses", e);<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>    }<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">051</span>  private Object zkwLock = new Object();<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private ZKWatcher zkw = null;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private List&lt;ServerName&gt; regionServers = new ArrayList&lt;&gt;(0);<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private long lastRegionServerUpdate;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  protected void disconnect() {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    synchronized (zkwLock) {<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      if (zkw != null) {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>        zkw.close();<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      }<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    }<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>  /**<a name="line.65"></a>
+<span class="sourceLineNo">066</span>   * A private method used to re-establish a zookeeper session with a peer cluster.<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   * @param ke<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  protected void reconnect(KeeperException ke) {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    if (ke instanceof ConnectionLossException || ke instanceof SessionExpiredException<a name="line.70"></a>
+<span class="sourceLineNo">071</span>        || ke instanceof AuthFailedException) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      String clusterKey = ctx.getPeerConfig().getClusterKey();<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      LOG.warn("Lost the ZooKeeper connection for peer " + clusterKey, ke);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      try {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>        reloadZkWatcher();<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      } catch (IOException io) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>        LOG.warn("Creation of ZookeeperWatcher failed for peer " + clusterKey, io);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      }<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    }<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 void start() {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    startAsync();<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 void stop() {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    stopAsync();<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>  protected void doStart() {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    try {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      reloadZkWatcher();<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      notifyStarted();<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    } catch (IOException e) {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      notifyFailed(e);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    }<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>  @Override<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected void doStop() {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    disconnect();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    notifyStopped();<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>  @Override<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  // Synchronize peer cluster connection attempts to avoid races and rate<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  // limit connections when multiple replication sources try to connect to<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  // the peer cluster. If the peer cluster is down we can get out of control<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  // over time.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  public synchronized UUID getPeerUUID() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    UUID peerUUID = null;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    try {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      synchronized (zkwLock) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        peerUUID = ZKClusterId.getUUIDForCluster(zkw);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      }<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    } catch (KeeperException ke) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      reconnect(ke);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    }<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    return peerUUID;<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>  /**<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * Get the ZK connection to this peer<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * @return zk connection<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   */<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  protected ZKWatcher getZkw() {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    synchronized (zkwLock) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      return zkw;<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><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  /**<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   * Closes the current ZKW (if not null) and creates a new one<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   * @throws IOException If anything goes wrong connecting<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  void reloadZkWatcher() throws IOException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    synchronized (zkwLock) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      if (zkw != null) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        zkw.close();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      zkw = new ZKWatcher(ctx.getConfiguration(),<a name="line.144"></a>
+<span class="sourceLineNo">145</span>        "connection to cluster: " + ctx.getPeerId(), this);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      zkw.registerListener(new PeerRegionServerListener(this));<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  @Override<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void abort(String why, Throwable e) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    LOG.error("The HBaseReplicationEndpoint corresponding to peer " + ctx.getPeerId()<a name="line.152"></a>
+<span class="sourceLineNo">153</span>        + " was aborted for the following reason(s):" + why, e);<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 boolean isAborted() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    // Currently this is never "Aborted", we just log when the abort method is called.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    return false;<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>  /**<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * Get the list of all the region servers from the specified peer<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * @param zkw zk connection to use<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @return list of region server addresses or an empty list if the slave is unavailable<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  protected static List&lt;ServerName&gt; fetchSlavesAddresses(ZKWatcher zkw)<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      throws KeeperException {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    List&lt;String&gt; children = ZKUtil.listChildrenAndWatchForNewChildren(zkw, zkw.znodePaths.rsZNode);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    if (children == null) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      return Collections.emptyList();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    List&lt;ServerName&gt; addresses = new ArrayList&lt;&gt;(children.size());<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    for (String child : children) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      addresses.add(ServerName.parseServerName(child));<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    }<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    return addresses;<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>  /**<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * Get a list of all the addresses of all the region servers<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * for this peer cluster<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @return list of addresses<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public List&lt;ServerName&gt; getRegionServers() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    try {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      // Synchronize peer cluster connection attempts to avoid races and rate<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      // limit connections when multiple replication sources try to connect to<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      // the peer cluster. If the peer cluster is down we can get out of control<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      // over time.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      synchronized (zkwLock) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        setRegionServers(fetchSlavesAddresses(zkw));<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    } catch (KeeperException ke) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      if (LOG.isDebugEnabled()) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        LOG.debug("Fetch slaves addresses failed", ke);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      }<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      reconnect(ke);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    return regionServers;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  }<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>   * Set the list of region servers for that peer<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   * @param regionServers list of addresses for the region servers<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   */<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  public synchronized void setRegionServers(List&lt;ServerName&gt; regionServers) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    this.regionServers = regionServers;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    lastRegionServerUpdate = System.currentTimeMillis();<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>  /**<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * Get the timestamp at which the last change occurred to the list of region servers to replicate<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * to.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * @return The System.currentTimeMillis at the last time the list of peer region servers changed.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   */<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  public long getLastRegionServerUpdate() {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    return lastRegionServerUpdate;<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>  /**<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * Tracks changes to the list of region servers in a peer's cluster.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   */<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  public static class PeerRegionServerListener extends ZKListener {<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>    private final HBaseReplicationEndpoint replicationEndpoint;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    private final String regionServerListNode;<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>    public PeerRegionServerListener(HBaseReplicationEndpoint replicationPeer) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      super(replicationPeer.getZkw());<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      this.replicationEndpoint = replicationPeer;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      this.regionServerListNode = replicationEndpoint.getZkw().znodePaths.rsZNode;<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 synchronized void nodeChildrenChanged(String path) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      if (path.equals(regionServerListNode)) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        try {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          LOG.info("Detected change to peer region servers, fetching updated list");<a name="line.239"></a>
+<span class="sourceLineNo">240</span>          replicationEndpoint.setRegionServers(fetchSlavesAddresses(replicationEndpoint.getZkw()));<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        } catch (KeeperException e) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          LOG.error("Error reading slave addresses", e);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        }<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      }<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    }<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>
 
 
 


[15/51] [partial] hbase-site git commit: Published site at f3d1c021de2264301f68eadb9ef126ff83d7ef53.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/883dde2f/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html
index 78aac51..d08a687 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.html
@@ -299,421 +299,377 @@
 <span class="sourceLineNo">291</span>    // Hold a lock on the manager instance while moving servers to prevent<a name="line.291"></a>
 <span class="sourceLineNo">292</span>    // another writer changing our state while we are working.<a name="line.292"></a>
 <span class="sourceLineNo">293</span>    synchronized (rsGroupInfoManager) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      if (master.getMasterCoprocessorHost() != null) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        master.getMasterCoprocessorHost().preMoveServers(servers, targetGroupName);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      // Presume first server's source group. Later ensure all servers are from this group.<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      Address firstServer = servers.iterator().next();<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      RSGroupInfo srcGrp = rsGroupInfoManager.getRSGroupOfServer(firstServer);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      if (srcGrp == null) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        // Be careful. This exception message is tested for in TestRSGroupsBase...<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        throw new ConstraintException("Source RSGroup for server " + firstServer<a name="line.302"></a>
-<span class="sourceLineNo">303</span>            + " does not exist.");<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      if (srcGrp.getName().equals(targetGroupName)) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        throw new ConstraintException("Target RSGroup " + targetGroupName +<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            " is same as source " + srcGrp + " RSGroup.");<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      // Only move online servers (when moving from 'default') or servers from other<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      // groups. This prevents bogus servers from entering groups<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      if (RSGroupInfo.DEFAULT_GROUP.equals(srcGrp.getName())) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>        if (srcGrp.getServers().size() &lt;= servers.size()) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          throw new ConstraintException(KEEP_ONE_SERVER_IN_DEFAULT_ERROR_MESSAGE);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        }<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        checkOnlineServersOnly(servers);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      // Ensure all servers are of same rsgroup.<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      for (Address server: servers) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        String tmpGroup = rsGroupInfoManager.getRSGroupOfServer(server).getName();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        if (!tmpGroup.equals(srcGrp.getName())) {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>          throw new ConstraintException("Move server request should only come from one source " +<a name="line.321"></a>
-<span class="sourceLineNo">322</span>              "RSGroup. Expecting only " + srcGrp.getName() + " but contains " + tmpGroup);<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>      if (srcGrp.getServers().size() &lt;= servers.size() &amp;&amp; srcGrp.getTables().size() &gt; 0) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>        throw new ConstraintException("Cannot leave a RSGroup " + srcGrp.getName() +<a name="line.326"></a>
-<span class="sourceLineNo">327</span>            " that contains tables without servers to host them.");<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>      // MovedServers may be &lt; passed in 'servers'.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      Set&lt;Address&gt; movedServers = rsGroupInfoManager.moveServers(servers, srcGrp.getName(),<a name="line.331"></a>
-<span class="sourceLineNo">332</span>          targetGroupName);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      List&lt;Address&gt; editableMovedServers = Lists.newArrayList(movedServers);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      boolean foundRegionsToMove;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      do {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        foundRegionsToMove = false;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        for (Iterator&lt;Address&gt; iter = editableMovedServers.iterator(); iter.hasNext();) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          Address rs = iter.next();<a name="line.338"></a>
-<span class="sourceLineNo">339</span>          // Get regions that are associated with this server.<a name="line.339"></a>
-<span class="sourceLineNo">340</span>          List&lt;RegionInfo&gt; regions = getRegions(rs);<a name="line.340"></a>
+<span class="sourceLineNo">294</span>      // Presume first server's source group. Later ensure all servers are from this group.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      Address firstServer = servers.iterator().next();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      RSGroupInfo srcGrp = rsGroupInfoManager.getRSGroupOfServer(firstServer);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (srcGrp == null) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        // Be careful. This exception message is tested for in TestRSGroupsBase...<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        throw new ConstraintException("Source RSGroup for server " + firstServer<a name="line.299"></a>
+<span class="sourceLineNo">300</span>            + " does not exist.");<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      }<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      if (srcGrp.getName().equals(targetGroupName)) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        throw new ConstraintException("Target RSGroup " + targetGroupName +<a name="line.303"></a>
+<span class="sourceLineNo">304</span>            " is same as source " + srcGrp + " RSGroup.");<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      // Only move online servers (when moving from 'default') or servers from other<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      // groups. This prevents bogus servers from entering groups<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      if (RSGroupInfo.DEFAULT_GROUP.equals(srcGrp.getName())) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        if (srcGrp.getServers().size() &lt;= servers.size()) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>          throw new ConstraintException(KEEP_ONE_SERVER_IN_DEFAULT_ERROR_MESSAGE);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        }<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        checkOnlineServersOnly(servers);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      // Ensure all servers are of same rsgroup.<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      for (Address server: servers) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        String tmpGroup = rsGroupInfoManager.getRSGroupOfServer(server).getName();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        if (!tmpGroup.equals(srcGrp.getName())) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>          throw new ConstraintException("Move server request should only come from one source " +<a name="line.318"></a>
+<span class="sourceLineNo">319</span>              "RSGroup. Expecting only " + srcGrp.getName() + " but contains " + tmpGroup);<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>      if (srcGrp.getServers().size() &lt;= servers.size() &amp;&amp; srcGrp.getTables().size() &gt; 0) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        throw new ConstraintException("Cannot leave a RSGroup " + srcGrp.getName() +<a name="line.323"></a>
+<span class="sourceLineNo">324</span>            " that contains tables without servers to host them.");<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>      // MovedServers may be &lt; passed in 'servers'.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      Set&lt;Address&gt; movedServers = rsGroupInfoManager.moveServers(servers, srcGrp.getName(),<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          targetGroupName);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      List&lt;Address&gt; editableMovedServers = Lists.newArrayList(movedServers);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      boolean foundRegionsToMove;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      do {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        foundRegionsToMove = false;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        for (Iterator&lt;Address&gt; iter = editableMovedServers.iterator(); iter.hasNext();) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          Address rs = iter.next();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          // Get regions that are associated with this server.<a name="line.336"></a>
+<span class="sourceLineNo">337</span>          List&lt;RegionInfo&gt; regions = getRegions(rs);<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>          LOG.info("Moving " + regions.size() + " region(s) from " + rs +<a name="line.339"></a>
+<span class="sourceLineNo">340</span>              " for server move to " + targetGroupName);<a name="line.340"></a>
 <span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span>          LOG.info("Moving " + regions.size() + " region(s) from " + rs +<a name="line.342"></a>
-<span class="sourceLineNo">343</span>              " for server move to " + targetGroupName);<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>          for (RegionInfo region: regions) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>            // Regions might get assigned from tables of target group so we need to filter<a name="line.346"></a>
-<span class="sourceLineNo">347</span>            if (targetGrp.containsTable(region.getTable())) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>              continue;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>            }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>            LOG.info("Moving region " + region.getShortNameToLog());<a name="line.350"></a>
-<span class="sourceLineNo">351</span>            this.master.getAssignmentManager().move(region);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>            if (master.getAssignmentManager().getRegionStates().<a name="line.352"></a>
-<span class="sourceLineNo">353</span>                getRegionState(region).isFailedOpen()) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>              // If region is in FAILED_OPEN state, it won't recover, not without<a name="line.354"></a>
-<span class="sourceLineNo">355</span>              // operator intervention... in hbase-2.0.0 at least. Continue rather<a name="line.355"></a>
-<span class="sourceLineNo">356</span>              // than mark region as 'foundRegionsToMove'.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>              continue;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>            foundRegionsToMove = true;<a name="line.359"></a>
+<span class="sourceLineNo">342</span>          for (RegionInfo region: regions) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>            // Regions might get assigned from tables of target group so we need to filter<a name="line.343"></a>
+<span class="sourceLineNo">344</span>            if (targetGrp.containsTable(region.getTable())) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>              continue;<a name="line.345"></a>
+<span class="sourceLineNo">346</span>            }<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            LOG.info("Moving region " + region.getShortNameToLog());<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            this.master.getAssignmentManager().move(region);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>            if (master.getAssignmentManager().getRegionStates().<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                getRegionState(region).isFailedOpen()) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>              // If region is in FAILED_OPEN state, it won't recover, not without<a name="line.351"></a>
+<span class="sourceLineNo">352</span>              // operator intervention... in hbase-2.0.0 at least. Continue rather<a name="line.352"></a>
+<span class="sourceLineNo">353</span>              // than mark region as 'foundRegionsToMove'.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>              continue;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>            }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>            foundRegionsToMove = true;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>          }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>          if (!foundRegionsToMove) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>            iter.remove();<a name="line.359"></a>
 <span class="sourceLineNo">360</span>          }<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          if (!foundRegionsToMove) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>            iter.remove();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          }<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        try {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          rsGroupInfoManager.wait(1000);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        } catch (InterruptedException e) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          LOG.warn("Sleep interrupted", e);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          Thread.currentThread().interrupt();<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      } while (foundRegionsToMove);<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>      if (master.getMasterCoprocessorHost() != null) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        master.getMasterCoprocessorHost().postMoveServers(servers, targetGroupName);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      }<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      LOG.info("Move server done: " + srcGrp.getName() + "=&gt;" + targetGroupName);<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><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  @Override<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  public void moveTables(Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    if (tables == null) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      throw new ConstraintException("The list of servers cannot be null.");<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    if (tables.size() &lt; 1) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      LOG.debug("moveTables() passed an empty set. Ignoring.");<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>    // Hold a lock on the manager instance while moving servers to prevent<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    // another writer changing our state while we are working.<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    synchronized (rsGroupInfoManager) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      if (master.getMasterCoprocessorHost() != null) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        master.getMasterCoprocessorHost().preMoveTables(tables, targetGroup);<a name="line.394"></a>
+<span class="sourceLineNo">361</span>        }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        try {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>          rsGroupInfoManager.wait(1000);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        } catch (InterruptedException e) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>          LOG.warn("Sleep interrupted", e);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>          Thread.currentThread().interrupt();<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        }<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      } while (foundRegionsToMove);<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span>      LOG.info("Move server done: " + srcGrp.getName() + "=&gt;" + targetGroupName);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    }<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 void moveTables(Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    if (tables == null) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      throw new ConstraintException("The list of servers cannot be null.");<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    if (tables.size() &lt; 1) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      LOG.debug("moveTables() passed an empty set. Ignoring.");<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      return;<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>    // Hold a lock on the manager instance while moving servers to prevent<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    // another writer changing our state while we are working.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    synchronized (rsGroupInfoManager) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      if(targetGroup != null) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        RSGroupInfo destGroup = rsGroupInfoManager.getRSGroup(targetGroup);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>        if(destGroup == null) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          throw new ConstraintException("Target " + targetGroup + " RSGroup does not exist.");<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        }<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        if(destGroup.getServers().size() &lt; 1) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>          throw new ConstraintException("Target RSGroup must have at least one server.");<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        }<a name="line.394"></a>
 <span class="sourceLineNo">395</span>      }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      if(targetGroup != null) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        RSGroupInfo destGroup = rsGroupInfoManager.getRSGroup(targetGroup);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        if(destGroup == null) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          throw new ConstraintException("Target " + targetGroup + " RSGroup does not exist.");<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        if(destGroup.getServers().size() &lt; 1) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>          throw new ConstraintException("Target RSGroup must have at least one server.");<a name="line.402"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>      for (TableName table : tables) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        String srcGroup = rsGroupInfoManager.getRSGroupOfTable(table);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        if(srcGroup != null &amp;&amp; srcGroup.equals(targetGroup)) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          throw new ConstraintException(<a name="line.400"></a>
+<span class="sourceLineNo">401</span>              "Source RSGroup " + srcGroup + " is same as target " + targetGroup +<a name="line.401"></a>
+<span class="sourceLineNo">402</span>              " RSGroup for table " + table);<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>      for (TableName table : tables) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        String srcGroup = rsGroupInfoManager.getRSGroupOfTable(table);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        if(srcGroup != null &amp;&amp; srcGroup.equals(targetGroup)) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          throw new ConstraintException(<a name="line.409"></a>
-<span class="sourceLineNo">410</span>              "Source RSGroup " + srcGroup + " is same as target " + targetGroup +<a name="line.410"></a>
-<span class="sourceLineNo">411</span>              " RSGroup for table " + table);<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        LOG.info("Moving table " + table.getNameAsString() + " to RSGroup " + targetGroup);<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      }<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      rsGroupInfoManager.moveTables(tables, targetGroup);<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>      // targetGroup is null when a table is being deleted. In this case no further<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      // action is required.<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      if (targetGroup != null) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        for (TableName table: tables) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          if (master.getAssignmentManager().isTableDisabled(table)) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>            LOG.debug("Skipping move regions because the table" + table + " is disabled.");<a name="line.422"></a>
-<span class="sourceLineNo">423</span>            continue;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          }<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          for (RegionInfo region :<a name="line.425"></a>
-<span class="sourceLineNo">426</span>              master.getAssignmentManager().getRegionStates().getRegionsOfTable(table)) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>            LOG.info("Moving region " + region.getShortNameToLog() +<a name="line.427"></a>
-<span class="sourceLineNo">428</span>                " to RSGroup " + targetGroup);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>            master.getAssignmentManager().move(region);<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          }<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><a name="line.433"></a>
-<span class="sourceLineNo">434</span>      if (master.getMasterCoprocessorHost() != null) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>        master.getMasterCoprocessorHost().postMoveTables(tables, targetGroup);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      }<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><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  @Override<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  public void addRSGroup(String name) throws IOException {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    if (master.getMasterCoprocessorHost() != null) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      master.getMasterCoprocessorHost().preAddRSGroup(name);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    rsGroupInfoManager.addRSGroup(new RSGroupInfo(name));<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    if (master.getMasterCoprocessorHost() != null) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      master.getMasterCoprocessorHost().postAddRSGroup(name);<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>  @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public void removeRSGroup(String name) throws IOException {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    // Hold a lock on the manager instance while moving servers to prevent<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    // another writer changing our state while we are working.<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    synchronized (rsGroupInfoManager) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      if (master.getMasterCoprocessorHost() != null) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        master.getMasterCoprocessorHost().preRemoveRSGroup(name);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      RSGroupInfo rsGroupInfo = rsGroupInfoManager.getRSGroup(name);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      if (rsGroupInfo == null) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        throw new ConstraintException("RSGroup " + name + " does not exist");<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      int tableCount = rsGroupInfo.getTables().size();<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      if (tableCount &gt; 0) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>        throw new ConstraintException("RSGroup " + name + " has " + tableCount +<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            " tables; you must remove these tables from the rsgroup before " +<a name="line.466"></a>
-<span class="sourceLineNo">467</span>            "the rsgroup can be removed.");<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      }<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      int serverCount = rsGroupInfo.getServers().size();<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      if (serverCount &gt; 0) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        throw new ConstraintException("RSGroup " + name + " has " + serverCount +<a name="line.471"></a>
-<span class="sourceLineNo">472</span>            " servers; you must remove these servers from the RSGroup before" +<a name="line.472"></a>
-<span class="sourceLineNo">473</span>            "the RSGroup can be removed.");<a name="line.473"></a>
+<span class="sourceLineNo">404</span>        LOG.info("Moving table " + table.getNameAsString() + " to RSGroup " + targetGroup);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      rsGroupInfoManager.moveTables(tables, targetGroup);<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span>      // targetGroup is null when a table is being deleted. In this case no further<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      // action is required.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      if (targetGroup != null) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>        for (TableName table: tables) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>          if (master.getAssignmentManager().isTableDisabled(table)) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>            LOG.debug("Skipping move regions because the table" + table + " is disabled.");<a name="line.413"></a>
+<span class="sourceLineNo">414</span>            continue;<a name="line.414"></a>
+<span class="sourceLineNo">415</span>          }<a name="line.415"></a>
+<span class="sourceLineNo">416</span>          for (RegionInfo region :<a name="line.416"></a>
+<span class="sourceLineNo">417</span>              master.getAssignmentManager().getRegionStates().getRegionsOfTable(table)) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>            LOG.info("Moving region " + region.getShortNameToLog() +<a name="line.418"></a>
+<span class="sourceLineNo">419</span>                " to RSGroup " + targetGroup);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>            master.getAssignmentManager().move(region);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>          }<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        }<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      }<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    }<a name="line.424"></a>
+<span class="sourceLineNo">425</span>  }<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span>  @Override<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  public void addRSGroup(String name) throws IOException {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    rsGroupInfoManager.addRSGroup(new RSGroupInfo(name));<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>  @Override<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  public void removeRSGroup(String name) throws IOException {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    // Hold a lock on the manager instance while moving servers to prevent<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    // another writer changing our state while we are working.<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    synchronized (rsGroupInfoManager) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      RSGroupInfo rsGroupInfo = rsGroupInfoManager.getRSGroup(name);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      if (rsGroupInfo == null) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        throw new ConstraintException("RSGroup " + name + " does not exist");<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      int tableCount = rsGroupInfo.getTables().size();<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      if (tableCount &gt; 0) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        throw new ConstraintException("RSGroup " + name + " has " + tableCount +<a name="line.443"></a>
+<span class="sourceLineNo">444</span>            " tables; you must remove these tables from the rsgroup before " +<a name="line.444"></a>
+<span class="sourceLineNo">445</span>            "the rsgroup can be removed.");<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      }<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      int serverCount = rsGroupInfo.getServers().size();<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      if (serverCount &gt; 0) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        throw new ConstraintException("RSGroup " + name + " has " + serverCount +<a name="line.449"></a>
+<span class="sourceLineNo">450</span>            " servers; you must remove these servers from the RSGroup before" +<a name="line.450"></a>
+<span class="sourceLineNo">451</span>            "the RSGroup can be removed.");<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      }<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      for (NamespaceDescriptor ns: master.getClusterSchema().getNamespaces()) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        String nsGroup = ns.getConfigurationValue(rsGroupInfo.NAMESPACE_DESC_PROP_GROUP);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        if (nsGroup != null &amp;&amp;  nsGroup.equals(name)) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>          throw new ConstraintException("RSGroup " + name + " is referenced by namespace: " +<a name="line.456"></a>
+<span class="sourceLineNo">457</span>              ns.getName());<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>      rsGroupInfoManager.removeRSGroup(name);<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<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 boolean balanceRSGroup(String groupName) throws IOException {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    ServerManager serverManager = master.getServerManager();<a name="line.466"></a>
+<span class="sourceLineNo">467</span>    AssignmentManager assignmentManager = master.getAssignmentManager();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    LoadBalancer balancer = master.getLoadBalancer();<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span>    synchronized (balancer) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      // If balance not true, don't run balancer.<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      if (!((HMaster) master).isBalancerOn()) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>        return false;<a name="line.473"></a>
 <span class="sourceLineNo">474</span>      }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      for (NamespaceDescriptor ns: master.getClusterSchema().getNamespaces()) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        String nsGroup = ns.getConfigurationValue(rsGroupInfo.NAMESPACE_DESC_PROP_GROUP);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        if (nsGroup != null &amp;&amp;  nsGroup.equals(name)) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>          throw new ConstraintException("RSGroup " + name + " is referenced by namespace: " +<a name="line.478"></a>
-<span class="sourceLineNo">479</span>              ns.getName());<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>      rsGroupInfoManager.removeRSGroup(name);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      if (master.getMasterCoprocessorHost() != null) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>        master.getMasterCoprocessorHost().postRemoveRSGroup(name);<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>  }<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 boolean balanceRSGroup(String groupName) throws IOException {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    ServerManager serverManager = master.getServerManager();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    AssignmentManager assignmentManager = master.getAssignmentManager();<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    LoadBalancer balancer = master.getLoadBalancer();<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>    synchronized (balancer) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      // If balance not true, don't run balancer.<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      if (!((HMaster) master).isBalancerOn()) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        return false;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span>      if (master.getMasterCoprocessorHost() != null) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        master.getMasterCoprocessorHost().preBalanceRSGroup(groupName);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      if (getRSGroupInfo(groupName) == null) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        throw new ConstraintException("RSGroup does not exist: "+groupName);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      }<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      // Only allow one balance run at at time.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      Map&lt;String, RegionState&gt; groupRIT = rsGroupGetRegionsInTransition(groupName);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      if (groupRIT.size() &gt; 0) {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        LOG.debug("Not running balancer because " + groupRIT.size() + " region(s) in transition: " +<a name="line.510"></a>
-<span class="sourceLineNo">511</span>          StringUtils.abbreviate(<a name="line.511"></a>
-<span class="sourceLineNo">512</span>              master.getAssignmentManager().getRegionStates().getRegionsInTransition().toString(),<a name="line.512"></a>
-<span class="sourceLineNo">513</span>              256));<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        return false;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      if (serverManager.areDeadServersInProgress()) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        LOG.debug("Not running balancer because processing dead regionserver(s): " +<a name="line.517"></a>
-<span class="sourceLineNo">518</span>            serverManager.getDeadServers());<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        return false;<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>      //We balance per group instead of per table<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      List&lt;RegionPlan&gt; plans = new ArrayList&lt;&gt;();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      for(Map.Entry&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; tableMap:<a name="line.524"></a>
-<span class="sourceLineNo">525</span>          getRSGroupAssignmentsByTable(groupName).entrySet()) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>        LOG.info("Creating partial plan for table " + tableMap.getKey() + ": "<a name="line.526"></a>
-<span class="sourceLineNo">527</span>            + tableMap.getValue());<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        List&lt;RegionPlan&gt; partialPlans = balancer.balanceCluster(tableMap.getValue());<a name="line.528"></a>
-<span class="sourceLineNo">529</span>        LOG.info("Partial plan for table " + tableMap.getKey() + ": " + partialPlans);<a name="line.529"></a>
-<span class="sourceLineNo">530</span>        if (partialPlans != null) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>          plans.addAll(partialPlans);<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>      long startTime = System.currentTimeMillis();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      boolean balancerRan = !plans.isEmpty();<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      if (balancerRan) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        LOG.info("RSGroup balance " + groupName + " starting with plan count: " + plans.size());<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        for (RegionPlan plan: plans) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>          LOG.info("balance " + plan);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>          assignmentManager.moveAsync(plan);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        }<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        LOG.info("RSGroup balance " + groupName + " completed after " +<a name="line.542"></a>
-<span class="sourceLineNo">543</span>            (System.currentTimeMillis()-startTime) + " seconds");<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      }<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      if (master.getMasterCoprocessorHost() != null) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        master.getMasterCoprocessorHost().postBalanceRSGroup(groupName, balancerRan);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      }<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      return balancerRan;<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    }<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>  @Override<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  public List&lt;RSGroupInfo&gt; listRSGroups() throws IOException {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    return rsGroupInfoManager.listRSGroups();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>  @Override<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  public RSGroupInfo getRSGroupOfServer(Address hostPort) throws IOException {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    return rsGroupInfoManager.getRSGroupOfServer(hostPort);<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>  @Override<a name="line.562"></a>
-<span class="sourceLineNo">563</span>  public void moveServersAndTables(Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables, String targetGroup)<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      throws IOException {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    if (servers == null || servers.isEmpty()) {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      throw new ConstraintException("The list of servers to move cannot be null or empty.");<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    if (tables == null || tables.isEmpty()) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      throw new ConstraintException("The list of tables to move cannot be null or empty.");<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>    //check target group<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    getAndCheckRSGroupInfo(targetGroup);<a name="line.573"></a>
-<span class="sourceLineNo">574</span><a name="line.574"></a>
-<span class="sourceLineNo">575</span>    // Hold a lock on the manager instance while moving servers and tables to prevent<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    // another writer changing our state while we are working.<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    synchronized (rsGroupInfoManager) {<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      if (master.getMasterCoprocessorHost() != null) {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        master.getMasterCoprocessorHost().preMoveServersAndTables(servers, tables, targetGroup);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      }<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      //check servers and tables status<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      checkServersAndTables(servers, tables, targetGroup);<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>      //Move servers and tables to a new group.<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      String srcGroup = getRSGroupOfServer(servers.iterator().next()).getName();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      rsGroupInfoManager.moveServersAndTables(servers, tables, srcGroup, targetGroup);<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>      //move regions which should not belong to these tables<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      moveRegionsFromServers(servers, tables, targetGroup);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      //move regions which should belong to these servers<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      moveRegionsToServers(servers, tables, targetGroup);<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span>      if (master.getMasterCoprocessorHost() != null) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        master.getMasterCoprocessorHost().postMoveServersAndTables(servers, tables, targetGroup);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      }<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    LOG.info("Move servers and tables done. Severs :"<a name="line.597"></a>
-<span class="sourceLineNo">598</span>            + servers + " , Tables : " + tables + " =&gt; " +  targetGroup);<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>  @Override<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  public void removeServers(Set&lt;Address&gt; servers) throws IOException {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      if (servers == null || servers.isEmpty()) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>        throw new ConstraintException("The set of servers to remove cannot be null or empty.");<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      }<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      // Hold a lock on the manager instance while moving servers to prevent<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      // another writer changing our state while we are working.<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      synchronized (rsGroupInfoManager) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          master.getMasterCoprocessorHost().preRemoveServers(servers);<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        }<a name="line.612"></a>
-<span class="sourceLineNo">613</span>        //check the set of servers<a name="line.613"></a>
-<span class="sourceLineNo">614</span>        checkForDeadOrOnlineServers(servers);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>        rsGroupInfoManager.removeServers(servers);<a name="line.615"></a>
-<span class="sourceLineNo">616</span>        if (master.getMasterCoprocessorHost() != null) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>          master.getMasterCoprocessorHost().postRemoveServers(servers);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>        }<a name="line.618"></a>
-<span class="sourceLineNo">619</span>        LOG.info("Remove decommissioned servers " + servers + " from rsgroup done.");<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>  }<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>  private Map&lt;String, RegionState&gt; rsGroupGetRegionsInTransition(String groupName)<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      throws IOException {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    Map&lt;String, RegionState&gt; rit = Maps.newTreeMap();<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    AssignmentManager am = master.getAssignmentManager();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    for(TableName tableName : getRSGroupInfo(groupName).getTables()) {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      for(RegionInfo regionInfo: am.getRegionStates().getRegionsOfTable(tableName)) {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>        RegionState state = am.getRegionStates().getRegionTransitionState(regionInfo);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>        if(state != null) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          rit.put(regionInfo.getEncodedName(), state);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      }<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    }<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    return rit;<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>  private Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      getRSGroupAssignmentsByTable(String groupName) throws IOException {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = Maps.newHashMap();<a name="line.641"></a>
-<span class="sourceLineNo">642</span>    RSGroupInfo rsGroupInfo = getRSGroupInfo(groupName);<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; assignments = Maps.newHashMap();<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    for(Map.Entry&lt;RegionInfo, ServerName&gt; entry:<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        master.getAssignmentManager().getRegionStates().getRegionAssignments().entrySet()) {<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      TableName currTable = entry.getKey().getTable();<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      ServerName currServer = entry.getValue();<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      RegionInfo currRegion = entry.getKey();<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      if (rsGroupInfo.getTables().contains(currTable)) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        assignments.putIfAbsent(currTable, new HashMap&lt;&gt;());<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        assignments.get(currTable).putIfAbsent(currServer, new ArrayList&lt;&gt;());<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        assignments.get(currTable).get(currServer).add(currRegion);<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      }<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    }<a name="line.654"></a>
-<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span>    Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; serverMap = Maps.newHashMap();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    for(ServerName serverName: master.getServerManager().getOnlineServers().keySet()) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      if(rsGroupInfo.getServers().contains(serverName.getAddress())) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        serverMap.put(serverName, Collections.emptyList());<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><a name="line.662"></a>
-<span class="sourceLineNo">663</span>    // add all tables that are members of the group<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    for(TableName tableName : rsGroupInfo.getTables()) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      if(assignments.containsKey(tableName)) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        result.put(tableName, new HashMap&lt;&gt;());<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        result.get(tableName).putAll(serverMap);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        result.get(tableName).putAll(assignments.get(tableName));<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        LOG.debug("Adding assignments for " + tableName + ": " + assignments.get(tableName));<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      }<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    }<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>    return result;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>  }<a name="line.674"></a>
-<span class="sourceLineNo">675</span><a name="line.675"></a>
-<span class="sourceLineNo">676</span>  /**<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   * Check if the set of servers are belong to dead servers list or online servers list.<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * @param servers servers to remove<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   */<a name="line.679"></a>
-<span class="sourceLineNo">680</span>  private void checkForDeadOrOnlineServers(Set&lt;Address&gt; servers) throws ConstraintException {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    // This uglyness is because we only have Address, not ServerName.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    Set&lt;Address&gt; onlineServers = new HashSet&lt;&gt;();<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    List&lt;ServerName&gt; drainingServers = master.getServerManager().getDrainingServersList();<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    for (ServerName server : master.getServerManager().getOnlineServers().keySet()) {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      // Only online but not decommissioned servers are really online<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      if (!drainingServers.contains(server)) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>        onlineServers.add(server.getAddress());<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&lt;Address&gt; deadServers = new HashSet&lt;&gt;();<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    for(ServerName server: master.getServerManager().getDeadServers().copyServerNames()) {<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      deadServers.add(server.getAddress());<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>    for (Address address: servers) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      if (onlineServers.contains(address)) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span>        throw new ConstraintException(<a name="line.698"></a>
-<span class="sourceLineNo">699</span>            "Server " + address + " is an online server, not allowed to remove.");<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      }<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      if (deadServers.contains(address)) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>        throw new ConstraintException(<a name="line.702"></a>
-<span class="sourceLineNo">703</span>            "Server " + address + " is on the dead servers list,"<a name="line.703"></a>
-<span class="sourceLineNo">704</span>                + " Maybe it will come back again, not allowed to remove.");<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      }<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
-<span class="sourceLineNo">707</span>  }<a name="line.707"></a>
-<span class="sourceLineNo">708</span>}<a name="line.708"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>      if (getRSGroupInfo(groupName) == null) {<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        throw new ConstraintException("RSGroup does not exist: "+groupName);<a name="line.477"></a>
+<span class="sourceLineNo">478</span>      }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>      // Only allow one balance run at at time.<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      Map&lt;String, RegionState&gt; groupRIT = rsGroupGetRegionsInTransition(groupName);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      if (groupRIT.size() &gt; 0) {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>        LOG.debug("Not running balancer because " + groupRIT.size() + " region(s) in transition: " +<a name="line.482"></a>
+<span class="sourceLineNo">483</span>          StringUtils.abbreviate(<a name="line.483"></a>
+<span class="sourceLineNo">484</span>              master.getAssignmentManager().getRegionStates().getRegionsInTransition().toString(),<a name="line.484"></a>
+<span class="sourceLineNo">485</span>              256));<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        return false;<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      }<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (serverManager.areDeadServersInProgress()) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        LOG.debug("Not running balancer because processing dead regionserver(s): " +<a name="line.489"></a>
+<span class="sourceLineNo">490</span>            serverManager.getDeadServers());<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        return false;<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>      //We balance per group instead of per table<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      List&lt;RegionPlan&gt; plans = new ArrayList&lt;&gt;();<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      for(Map.Entry&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; tableMap:<a name="line.496"></a>
+<span class="sourceLineNo">497</span>          getRSGroupAssignmentsByTable(groupName).entrySet()) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>        LOG.info("Creating partial plan for table " + tableMap.getKey() + ": "<a name="line.498"></a>
+<span class="sourceLineNo">499</span>            + tableMap.getValue());<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        List&lt;RegionPlan&gt; partialPlans = balancer.balanceCluster(tableMap.getValue());<a name="line.500"></a>
+<span class="sourceLineNo">501</span>        LOG.info("Partial plan for table " + tableMap.getKey() + ": " + partialPlans);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        if (partialPlans != null) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          plans.addAll(partialPlans);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>        }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      long startTime = System.currentTimeMillis();<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      boolean balancerRan = !plans.isEmpty();<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      if (balancerRan) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>        LOG.info("RSGroup balance " + groupName + " starting with plan count: " + plans.size());<a name="line.509"></a>
+<span class="sourceLineNo">510</span>        for (RegionPlan plan: plans) {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          LOG.info("balance " + plan);<a name="line.511"></a>
+<span class="sourceLineNo">512</span>          assignmentManager.moveAsync(plan);<a name="line.512"></a>
+<span class="sourceLineNo">513</span>        }<a name="line.513"></a>
+<span class="sourceLineNo">514</span>        LOG.info("RSGroup balance " + groupName + " completed after " +<a name="line.514"></a>
+<span class="sourceLineNo">515</span>            (System.currentTimeMillis()-startTime) + " seconds");<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      }<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      return balancerRan;<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>  @Override<a name="line.521"></a>
+<span class="sourceLineNo">522</span>  public List&lt;RSGroupInfo&gt; listRSGroups() throws IOException {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    return rsGroupInfoManager.listRSGroups();<a name="line.523"></a>
+<span class="sourceLineNo">524</span>  }<a name="line.524"></a>
+<span class="sourceLineNo">525</span><a name="line.525"></a>
+<span class="sourceLineNo">526</span>  @Override<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  public RSGroupInfo getRSGroupOfServer(Address hostPort) throws IOException {<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    return rsGroupInfoManager.getRSGroupOfServer(hostPort);<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>  @Override<a name="line.531"></a>
+<span class="sourceLineNo">532</span>  public void moveServersAndTables(Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables, String targetGroup)<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      throws IOException {<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    if (servers == null || servers.isEmpty()) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      throw new ConstraintException("The list of servers to move cannot be null or empty.");<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    if (tables == null || tables.isEmpty()) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      throw new ConstraintException("The list of tables to move cannot be null or empty.");<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>    //check target group<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    getAndCheckRSGroupInfo(targetGroup);<a name="line.542"></a>
+<span class="sourceLineNo">543</span><a name="line.543"></a>
+<span class="sourceLineNo">544</span>    // Hold a lock on the manager instance while moving servers and tables to prevent<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    // another writer changing our state while we are working.<a name="line.545"></a>
+<span class="sourceLineNo">546</span>    synchronized (rsGroupInfoManager) {<a name="line.546"></a>
+<span class="sourceLineNo">547</span>      //check servers and tables status<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      checkServersAndTables(servers, tables, targetGroup);<a name="line.548"></a>
+<span class="sourceLineNo">549</span><a name="line.549"></a>
+<span class="sourceLineNo">550</span>      //Move servers and tables to a new group.<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      String srcGroup = getRSGroupOfServer(servers.iterator().next()).getName();<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      rsGroupInfoManager.moveServersAndTables(servers, tables, srcGroup, targetGroup);<a name="line.552"></a>
+<span class="sourceLineNo">553</span><a name="line.553"></a>
+<span class="sourceLineNo">554</span>      //move regions which should not belong to these tables<a name="line.554"></a>
+<span class="sourceLineNo">555</span>      moveRegionsFromServers(servers, tables, targetGroup);<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      //move regions which should belong to these servers<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      moveRegionsToServers(servers, tables, targetGroup);<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    LOG.info("Move servers and tables done. Severs :"<a name="line.559"></a>
+<span class="sourceLineNo">560</span>            + servers + " , Tables : " + tables + " =&gt; " +  targetGroup);<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>  @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  public void removeServers(Set&lt;Address&gt; servers) throws IOException {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>    {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      if (servers == null || servers.isEmpty()) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>        throw new ConstraintException("The set of servers to remove cannot be null or empty.");<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      }<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      // Hold a lock on the manager instance while moving servers to prevent<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      // another writer changing our state while we are working.<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      synchronized (rsGroupInfoManager) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        //check the set of servers<a name="line.572"></a>
+<span class="sourceLineNo">573</span>        checkForDeadOrOnlineServers(servers);<a name="line.573"></a>
+<span class="sourceLineNo">574</span>        rsGroupInfoManager.removeServers(servers);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>        LOG.info("Remove decommissioned servers " + servers + " from rsgroup done.");<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      }<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>  private Map&lt;String, RegionState&gt; rsGroupGetRegionsInTransition(String groupName)<a name="line.580"></a>
+<span class="sourceLineNo">581</span>      throws IOException {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    Map&lt;String, RegionState&gt; rit = Maps.newTreeMap();<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    AssignmentManager am = master.getAssignmentManager();<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    for(TableName tableName : getRSGroupInfo(groupName).getTables()) {<a name="line.584"></a>
+<span class="sourceLineNo">585</span>      for(RegionInfo regionInfo: am.getRegionStates().getRegionsOfTable(tableName)) {<a name="line.585"></a>
+<span class="sourceLineNo">586</span>        RegionState state = am.getRegionStates().getRegionTransitionState(regionInfo);<a name="line.586"></a>
+<span class="sourceLineNo">587</span>        if(state != null) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span>          rit.put(regionInfo.getEncodedName(), state);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>        }<a name="line.589"></a>
+<span class="sourceLineNo">590</span>      }<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    }<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    return rit;<a name="line.592"></a>
+<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>  private Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      getRSGroupAssignmentsByTable(String groupName) throws IOException {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = Maps.newHashMap();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>    RSGroupInfo rsGroupInfo = getRSGroupInfo(groupName);<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; assignments = Maps.newHashMap();<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    for(Map.Entry&lt;RegionInfo, ServerName&gt; entry:<a name="line.600"></a>
+<span class="sourceLineNo">601</span>        master.getAssignmentManager().getRegionStates().getRegionAssignments().entrySet()) {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      TableName currTable = entry.getKey().getTable();<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      ServerName currServer = entry.getValue();<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      RegionInfo currRegion = entry.getKey();<a name="line.604"></a>
+<span class="sourceLineNo">605</span>      if (rsGroupInfo.getTables().contains(currTable)) {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>        assignments.putIfAbsent(currTable, new HashMap&lt;&gt;());<a name="line.606"></a>
+<span class="sourceLineNo">607</span>        assignments.get(currTable).putIfAbsent(currServer, new ArrayList&lt;&gt;());<a name="line.607"></a>
+<span class="sourceLineNo">608</span>        assignments.get(currTable).get(currServer).add(currRegion);<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>    Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; serverMap = Maps.newHashMap();<a name="line.612"></a>
+<span class="sourceLineNo">613</span>    for(ServerName serverName: master.getServerManager().getOnlineServers().keySet()) {<a name="line.613"></a>
+<span class="sourceLineNo">614</span>      if(rsGroupInfo.getServers().contains(serverName.getAddress())) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>        serverMap.put(serverName, Collections.emptyList());<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      }<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>    // add all tables that are members of the group<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    for(TableName tableName : rsGroupInfo.getTables()) {<a name="line.620"></a>
+<span class="sourceLineNo">621</span>      if(assignments.containsKey(tableName)) {<a name="line.621"></a>
+<span class="sourceLineNo">622</span>        result.put(tableName, new HashMap&lt;&gt;());<a name="line.622"></a>
+<span class="sourceLineNo">623</span>        result.get(tableName).putAll(serverMap);<a name="line.623"></a>
+<span class="sourceLineNo">624</span>        result.get(tableName).putAll(assignments.get(tableName));<a name="line.624"></a>
+<span class="sourceLineNo">625</span>        LOG.debug("Adding assignments for " + tableName + ": " + assignments.get(tableName));<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>    return result;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
+<span class="sourceLineNo">631</span><a name="line.631"></a>
+<span class="sourceLineNo">632</span>  /**<a name="line.632"></a>
+<span class="sourceLineNo">633</span>   * Check if the set of servers are belong to dead servers list or online servers list.<a name="line.633"></a>
+<span class="sourceLineNo">634</span>   * @param servers servers to remove<a name="line.634"></a>
+<span class="sourceLineNo">635</span>   */<a name="line.635"></a>
+<span class="sourceLineNo">636</span>  private void checkForDeadOrOnlineServers(Set&lt;Address&gt; servers) throws ConstraintException {<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    // This uglyness is because we only have Address, not ServerName.<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    Set&lt;Address&gt; onlineServers = new HashSet&lt;&gt;();<a name="line.638"></a>
+<span class="sourceLineNo">639</span>    List&lt;ServerName&gt; drainingServers = master.getServerManager().getDrainingServersList();<a name="line.639"></a>
+<span class="sourceLineNo">640</span>    for (ServerName server : master.getServerManager().getOnlineServers().keySet()) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      // Only online but not decommissioned servers are really online<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      if (!drainingServers.contains(server)) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>        onlineServers.add(server.getAddress());<a name="line.643"></a>
+<span class="sourceLineNo">644</span>      }<a name="line.644"></a>
+<span class="sourceLineNo">645</span>    }<a name="line.645"></a>
+<span class="sourceLineNo">646</span><a name="line.646"></a>
+<span class="sourceLineNo">647</span>    Set&lt;Address&gt; deadServers = new HashSet&lt;&gt;();<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    for(ServerName server: master.getServerManager().getDeadServers().copyServerNames()) {<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      deadServers.add(server.getAddress());<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>    for (Address address: servers) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      if (onlineServers.contains(address)) {<a name="line.653"></a>
+<span class="sourceLineNo">654</span>        throw new ConstraintException(<a name="line.654"></a>
+<span class="sourceLineNo">655</span>            "Server " + address + " is an online server, not allowed to remove.");<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      if (deadServers.contains(address)) {<a name="line.657"></a>
+<span class="sourceLineNo">658</span>        throw new ConstraintException(<a name="line.658"></a>
+<span class="sourceLineNo">659</span>            "Server " + address + " is on the dead servers list,"<a name="line.659"></a>
+<span class="sourceLineNo">660</span>                + " Maybe it will come back again, not allowed to remove.");<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      }<a name="line.661"></a>
+<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
+<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
+<span class="sourceLineNo">664</span>}<a name="line.664"></a>